访问求解器状态和终止条件
/Pyomo 旨在为用户提供高级脚本编写功能,以便使用现成的求解器快速轻松地编写元算法。编写这些脚本的用户通常需要根据从求解器获得的状态或终止条件做出决策。为此,Pyomo 提供了一组标准化的对象,无论使用何种求解器,都可以用于查询求解器信息。以下代码片段提供了一个典型场景,其中 SolverStatus 和 TerminationCondition 对象可能有用。
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
下表提供了所有可用求解器状态和终止条件的完整列表。
| 求解器状态 | |
| ok | 正常终止 |
| warning | 以异常条件终止 |
| error | 内部错误终止 |
| aborted | 因外部条件(例如中断)终止 |
| unknown | 未知(未初始化的值) |
终止条件
| maxTimeLimit | 超出允许的最大时间限制 |
| maxIterations | 超出允许的最大迭代次数 |
| minFunctionValue | 找到小于指定函数值的解 |
| minStepLength | 步长小于指定限制 |
| globallyOptimal | 找到全局最优解 |
| locallyOptimal | 找到局部最优解 |
| optimal | 找到最优解 |
| maxEvaluations | 超出最大问题评估次数(例如,分支定界节点) |
| other | 其他,未分类的正常终止 |
| unbounded | 证明问题无界 |
| infeasible | 证明问题不可行 |
| invalidProblem | 问题设置或特性对求解器无效 |
| solverFailure | 求解器未能正确终止 |
| internalSolverError | 内部求解器错误 |
| error | 其他错误 |
| userInterrupt | 用户生成的中断信号 |
| resourceInterrupt | 求解器使用的资源中的中断信号 |
| licensingProblem | 访问求解器许可时出现问题 |
