ILOG CPLEX 11.0 User's Manual > Languages and APIs > ILOG Concert Technology for C++ Users > Accessing Solution Information > Analyzing Infeasible Problems

An important feature of ILOG CPLEX is that even if no feasible solution has been found, (that is, if cplex.solve returns IloFalse), some information about the problem can be queried. All the methods discussed so far may successfully return information about the current (infeasible) solution which ILOG CPLEX maintains.

Unfortunately, there is no simple comprehensive rule about whether or not current solution information can be queried because, by default, ILOG CPLEX uses a presolve procedure to simplify the model. If, for example, the model is proven to be infeasible during the presolve, no current solution is generated by the optimizer. If, in contrast, infeasibility is proven by the optimizer, current solution information is available to be queried. The status returned by calling cplex.getCplexStatus may help you decide which case you are facing, but it is probably safer and easier to include the methods for querying solution within try/catch statements.

When an LP has been proven to be infeasible, ILOG CPLEX provides assistance for investigating the cause of the infeasibility. In one approach, known as FeasOpt, ILOG CPLEX accepts an infeasible model and selectively relaxes bounds and constraints to find a minimal set of changes that would make the model feasible. It then reports these suggested changes and the solution they would produce for you to decide whether to apply them in your model. For more about this approach, see Repairing Infeasibility: FeasOpt.

In another approach, ILOG CPLEX can detect a conflict among the constraints and bounds of an infeasible model and refine the conflict to report to you a minimal conflict to repair yourself. For more about this approach, see Diagnosing Infeasibility by Refining Conflicts.

For more about these and other ways of overcoming infeasibility, see Diagnosing LP Infeasibility.