当我为我的问题添加一个特定的约束时,问题的LpStatus解决了改变为" Undefined" (没有这个约束,它是" Optimal")。在本页面的顶部显示了返回状态的可能性,但它似乎并不能解释它们的含义。任何人都可以解释一下" undefined"地位意味着什它在指定约束时类似于语法错误吗?
答案 0 :(得分:10)
可以从PuLP中的解算器返回五个状态代码:
答案 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 解决方案状态,因此它仍未定义。