是否可以始终从终止条件推断出求解器状态?

时间:2019-04-01 21:04:11

标签: pyomo

我认为,如果终止条件为“最佳”,则求解器状态必须为“正常”。 https://pyomo.readthedocs.io/en/latest/working_models.html#accessing-solver-status上的文档似乎通过声明“值'optimal'表示求解程序已成功”来证实这一点。但是该段后面的示例检查求解器状态为“ ok”,并且终止条件为“ optimal”。

那么终止条件本身不可以被信任吗?实际上是否存在终止条件为“最佳”但求解器状态为“错误”的情况?这是否取决于使用哪个求解器?

让我感到困惑的是,紧随其后的示例仅检查终止条件。位于http://www.pyomo.org/blog/2015/1/8/accessing-solver的示例与第一个示例基本相同,并同时检查求解器状态和终止条件。

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我不确定我是否能理解您的所有问题,或者可以回答,但是我可以举一个我在Pyomo-IPOPT: solver falls into local minima, how to avoid that?中详述的示例

使用IPOPT作为求解器,该求解器处于局部极小值,同时仍返回最佳条件。

这个答案

So can the termination condition by itself not be trusted?

是的

Does this depend on which solver is being used?

可能是因为我的测试用例无法通过可靠的全局求解器发生。

Are there actually cases where the termination condition is "optimal" but the solver status is something like "error"?

我从未见过这种情况发生,这似乎意味着终止消息的逻辑被破坏了。

答案 1 :(得分:0)

我不确定我是否完全理解您的问题。在这里,由于SO并不是一个“向我阅读文档”问题的网站,所以我认为您的问题是关于使用库的技术方法的,因此,我相信这将有助于回答您的问题,而不会听起来像我重复其中的内容文档。

在我看来,求解器状态在给定的示例中用作避免错误的一种方式。从逻辑上讲,求解器必须具有“ ok”状态才能返回终止条件。即使您的求解器返回“不可行”状态,也并不意味着求解器遇到了错误,并且与错误相差甚远!状态仍然是“ ok”,因为到目前为止您的求解器都可以正常工作,并且可以进行其他优化。但是,当状态为“错误”时,则意味着发生了最糟糕的事情。求解器内部或与Pyomo的接口发生故障,这是找到它的一种方法。您的求解器甚至可能找不到终止条件。在这种情况下,当求解器甚至无法给出终止条件时,用户可能希望避免检索终止条件。这样可以避免引发异常,并有助于处理此类情况。这是一个很好的做法。

因此,您不应仅依赖于求解器状态,而应仅依赖于终止条件来知道问题是“最佳”还是“ maxTimeLimit”等等。但是,如果您的求解器发生问题,则最好测试求解器是否可以通过使用求解器状态返回终止条件。