Accessing Solution Information

Accessing Solution Status

Calling cplex.solve() returns a boolean indicating whether or not a feasible solution (but not necessarily the optimal one) has been found. To obtain more of the information about the model that CPLEX found during the call to the solve() method, cplex.getStatus() can be called. It returns a member of the nested enumeration type:

enum IloAlgorithm::Status {
  Unknown,
  Feasible,
  Optimal,
  Infeasible,
  Unbounded,
  InfeasibleOrUnbounded,
  Error
};

Notice that the fully qualified names have the IloAlgorithm prefix. Table 1.3 shows what the possible return statuses mean for the extracted model.

Table 1.3 Algorithm Status and Information About the Model

Return Status 
Extracted Model 
Feasible 
has been proven to be feasible. A feasible solution can be queried. 
Optimal 
has been solved to optimality. The optimal solution can be queried. 
Infeasible 
has been proven to be infeasible. 
Unbounded 
has been proven to be unbounded. The notion of unboundedness adopted by IloCplex does not include that the model has been proven to be feasible. Instead, what has been proven is that if there is a feasible solution with objective value x^*, there exists a feasible solution with objective value x^*-1 for a minimization problem, or x^*+1 for a maximization problem. 
InfeasibleOrUnbounded 
has been proven to be infeasible or unbounded. 
Unknown  
has not been able to be processed far enough to prove anything about the model. A common reason may be that a time limit was hit. 
Error 
has not been able to be processed or an error occurred during the optimization. 

As can be seen, these statuses indicate information about the model that the CPLEX optimizer was able to prove during the last call to method solve(). In addition, the CPLEX optimizer provides information about how it terminated. For example, it may have terminated with only a feasible but not optimal solution because it hit a limit or because a user callback terminated the optimization. Such information is accessible by calling method cplex.getCplexStatus(), which returns a member of the nested enumeration type IloCplex::Status. For more information about those statuses see the ILOG CPLEX Reference Manual.


Previous Page: Choosing an Optimizer  Return to Top Next Page: Querying Solution Data