python - PULP - 如何获取 CPLEX 求解器状态而不是 LpStatus 状态?

标签 python linear-programming cplex pulp

我在 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/

相关文章:

python - scipy.optimize.linprog 等式约束似乎不满足

python - 实现具有自定义约束的 Python 求解器

java - 在Maven项目中导入Cplex库时如何修复 'IncompatibleClassChangeError: Implementing Class'?

python - int 字典与 string 字典以减少大小

linear-programming - 如何在 AMPL 中相对于另一个变量分配二进制变量

python - 循环中断 breaking tqdm

user-interface - Mac上的CPLEX Optimization Studio GUI

c++ - 优先约束背包

python - CSV 到文本文件布局

python - 在 Python 中对算法进行排序的最快方法