当我为我的问题添加一个特定的约束时,问题的LpStatus解决了“Undefined”的变化(没有这个约束,它是“Optimal”)。在本页面的顶部显示了返回状态的可能性,但它似乎没有解释它们的含义。任何人都可以解释“未定义”状态的含义吗?它在指定约束时类似于语法错误?
当我为我的问题添加一个特定的约束时,问题的LpStatus解决了“Undefined”的变化(没有这个约束,它是“Optimal”)。在本页面的顶部显示了返回状态的可能性,但它似乎没有解释它们的含义。任何人都可以解释“未定义”状态的含义吗?它在指定约束时类似于语法错误?
可以从解算器返回五个状态代码 纸浆:
存在并找到最佳解决方案。
是问题解决之前的默认设置。
问题没有可行的解决方案。
成本函数是无限的。
尚未找到可行的解决方案(但可能存在)。
它们似乎是来自的状态代码的映射 GPLK。
可以从解算器返回五个状态代码 纸浆:
存在并找到最佳解决方案。
是问题解决之前的默认设置。
问题没有可行的解决方案。
成本函数是无限的。
尚未找到可行的解决方案(但可能存在)。
它们似乎是来自的状态代码的映射 GPLK。
“未定义”意味着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 解决方案状态,因此它仍未定义。