问题描述
我在 Python 中通过 PULP 使用 CPLEX 求解器。当我解决时间限制问题时,CPLEX 将代码 107 打印到屏幕上,这意味着“超出时间限制,但存在整数解”。但是,如果我打印 pulp.LpStatus[problem.status]
的状态,我得到的是值 1,根据纸浆的 documentation 表示已找到最佳解决方案,这实际上是错误的。
解决方法
您可以直接访问 CPLEX 状态代码和状态字符串。考虑以下示例:
>>> import pulp
>>> prob = pulp.LpProblem("example",pulp.LpMinimize)
>>> x = pulp.LpVariable('x',lowBound=0,upBound=1)
>>> prob+= x <= -1
-
示例 1 - 超出时间限制
>>> solver = pulp.CPLEX_PY(msg=0,timeLimit=0) >>> prob.setSolver(solver) >>> prob.solve() -3 >>> solver.solverModel.solution.get_status() 108 >>> solver.solverModel.solution.get_status_string() 'time limit exceeded,no integer solution'
-
示例 2 - 不可行
>>> solver = pulp.CPLEX_PY(msg=0) >>> prob.setSolver(solver) >>> prob.solve() -1 >>> solver.solverModel.solution.get_status() 103 >>> solver.solverModel.solution.get_status_string() 'integer infeasible'