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


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


4727
2018-06-11 16:25


起源



答案:


可以从解算器返回五个状态代码 纸浆

  1. 最佳
  2. 没解决
  3. 不可行
  4. 无界
  5. 未定义

最佳

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

没解决

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

不可行

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

无界

成本函数是无限的。

未定义

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

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

大多数信息来自阅读 资源 和这个 资源


9
2017-07-23 19:02



那么,如果返回UNDEFINED以使其更加努力,你会怎么做? - David Doria


答案:


可以从解算器返回五个状态代码 纸浆

  1. 最佳
  2. 没解决
  3. 不可行
  4. 无界
  5. 未定义

最佳

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

没解决

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

不可行

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

无界

成本函数是无限的。

未定义

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

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

大多数信息来自阅读 资源 和这个 资源


9
2017-07-23 19:02



那么,如果返回UNDEFINED以使其更加努力,你会怎么做? - David Doria


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

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

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

这是一些额外的 技术信息 “Undefined”来自哪里:

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

这是 资源 对于预解决问题。

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


0
2018-05-06 19:49