我在 Python 中通过 PULP 使用 CPLEX 求解器。当我解决有时间限制的问题时,CPLEX 会在屏幕上打印代码 107这意味着“超出时间限制,但存在整数解”。但是,如果我打印 pulp.LpStatus[problem.status]
的状态,我得到的结果是值 1,根据pulp的 documentation表示找到了最优解,实际上是错误的。
如何访问 CPLEX 状态代码而不是 PULP 的状态代码?
最佳答案
您可以直接访问 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'
关于python - PULP - 如何获取 CPLEX 求解器状态而不是 LpStatus 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65530045/