访问求解器状态和终止条件

Pyomo 旨在为用户提供高级脚本编写功能,以便使用现成的求解器快速轻松地编写元算法。编写这些脚本的用户通常需要根据从求解器获得的状态或终止条件做出决策。为此,Pyomo 提供了一组标准化的对象,无论使用何种求解器,都可以用于查询求解器信息。以下代码片段提供了一个典型场景,其中 SolverStatusTerminationCondition 对象可能有用。


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 访问求解器许可时出现问题