PuLP LpStatus = Undefined实际上意味着什么?

时间:2014-06-11 16:25:38

标签: python pulp

当我为我的问题添加一个特定的约束时,问题的LpStatus解决了改变为" Undefined" (没有这个约束,它是" Optimal")。在本页面的顶部显示了返回状态的可能性,但它似乎并不能解释它们的含义。任何人都可以解释一下" undefined"地位意味着什它在指定约束时类似于语法错误吗?

2 个答案:

答案 0 :(得分:10)

可以从PuLP中的解算器返回五个状态代码:

  1. 优化
  2. 未解决
  3. 不可行
  4. 无界
  5. 未定义
  6. 最优

    存在并找到最佳解决方案。

    未解决

    是问题解决之前的默认设置。

    不可行

    问题没有可行的解决方案。

    无界

    成本函数无限制。

    UNDEFINED

    尚未找到可行的解决方案(但可能存在)。

    它们似乎是GPLK的状态代码映射。

    大多数信息来自阅读source和此resource

答案 1 :(得分:1)

“未定义”意味着PuLP不知道如何解释求解器的输出,但似乎在某些混合整数程序不可行时会发生。

您是否获得“未定义”或“不可行”取决于PuLP使用的解算器,例如: CBC,GLPK,COIN等。这些求解器有一个“预解决”步骤,然后是一个求解步骤;如果在预解中检测到不可行性,它将返回“未定义”,如果在求解步骤中检测到它将返回“不可行”。

我只使用过CBC和GLPK求解器,而且我只看到了CBC求解器的这个特殊问题。这个thread表明在GLPK版本4.53中修复了GLPK求解器中的相同错误。

以下是“未定义”来自的其他technical info

  

我的假设是'未定义'状态意味着CBC以某种奇怪的方式终止,让PuLP得到了放松子问题的中间解决方案。 (因为当PuLP的readol_MPS方法无法在CBC解决方案文件中找到任何其他PuLP状态时,'未定义'是默认状态。我在PuLP的solver.py中找到了。)

以下是预解决问题的source

  

当mip预处理器检测到不可行性时,可能会发生这种情况   (不是由mip求解器),错误地不会改变mip   解决方案状态,因此它仍未定义。