我认为,如果终止条件为“最佳”,则求解器状态必须为“正常”。 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的示例与第一个示例基本相同,并同时检查求解器状态和终止条件。
在此先感谢您的帮助。
答案 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”等等。但是,如果您的求解器发生问题,则最好测试求解器是否可以通过使用求解器状态返回终止条件。