Accessing solver status and termination conditions
/Pyomo has been designed to provide high level scripting capabilities for users to quickly and easily write meta-algorithms using off the shelf solvers. Users writing these scripts often need to make decisions based on the status or the termination condition obtained from a solver. To this aim, Pyomo provides a standardized set of objects that can be used to query solver information regardless of the solver being used. The following code snippet provides a typical scenario where SolverStatus and TerminationCondition objects can be useful.
from pyomo.opt import SolverStatus, TerminationCondition
…
results = opt.solve(instance) # Solving a model instance
instance.load(results) # Loading solution into results object
if (results.solver.status == SolverStatus.ok) and (results.solver.termination_condition == TerminationCondition.optimal):
# Do something when the solution in optimal and feasible
elif (results.solver.termination_condition == TerminationCondition.infeasible):
# Do something when model in infeasible
else:
# Something else is wrong
print “Solver Status: ”, result.solver.status
The following table provides a complete list of all available solver statuses and termination conditions.
| Solver Statuses | |
| ok | Normal termination |
| warning | Termination with unusual condition |
| error | Terminated internally with error |
| aborted | Terminated due to external conditions (e.g. interrupts) |
| unknown | Unknown (an uninitialized value) |
| maxTimeLimit | Exceeded maximum time limit allowed |
| maxIterations | Exceeded maximum number of iterations allowed |
| minFunctionValue | Found solution smaller than specified function value |
| minStepLength | Step length is smaller than specified limit |
| globallyOptimal | Found a globally optimal solution |
| locallyOptimal | Found a locally optimal solution |
| optimal | Found an optimal solution |
| maxEvaluations | Exceeded maximum number of problem evaluations (e.g., branch and bound nodes) |
| other | Other, uncategorized normal termination |
| unbounded | Demonstrated that problem is unbounded |
| infeasible | Demonstrated that problem is infeasible |
| invalidProblem | The problem setup or characteristics are not valid for the solver |
| solverFailure | Solver failed to terminate correctly |
| internalSolverError | Internal solver error |
| error | Other error |
| userInterrupt | Interrupt signal generated by user |
| resourceInterrupt | Interrupt signal in resources used by the solver |
| licensingProblem | Problem accessing solver license |
