Pyomo 能否始终从终止条件推断解算器状态?

Pyomo 能否始终从终止条件推断解算器状态?,pyomo,Pyomo,我假设如果终止条件为“最优”,则解算器状态必须为“ok”。位于的文档似乎通过说明“值‘最优’表示解算器成功”来证实这一点。但该段后面的示例检查解算器状态是否为“ok”,终止条件是否为“最优” 那么,终止条件本身是否可以不受信任?是否确实存在终止条件为“最优”但解算器状态类似于“错误”的情况?这是否取决于正在使用的解算器 更让我困惑的是,接下来的例子是只检查终止条件。位于的示例与第一个示例基本相同,并检查解算器状态和终止条件 提前感谢您的帮助。我不确定我是否理解您的所有问题,或者我能否回答,但我可

我假设如果终止条件为“最优”,则解算器状态必须为“ok”。位于的文档似乎通过说明“值‘最优’表示解算器成功”来证实这一点。但该段后面的示例检查解算器状态是否为“ok”,终止条件是否为“最优”

那么,终止条件本身是否可以不受信任?是否确实存在终止条件为“最优”但解算器状态类似于“错误”的情况?这是否取决于正在使用的解算器

更让我困惑的是,接下来的例子是只检查终止条件。位于的示例与第一个示例基本相同,并检查解算器状态和终止条件


提前感谢您的帮助。

我不确定我是否理解您的所有问题,或者我能否回答,但我可以给您举一个我在中详细介绍的示例

使用
IPOPT
作为解算器,解算器在返回最佳条件的同时陷入局部极小值

这就是答案

So can the termination condition by itself not be trusted?

可能,因为我的测试用例不会使用可靠的全局解算器

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

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

我不确定我是否理解您的所有问题,或者我能否回答,但我可以给您一个我在中详细介绍的示例

使用
IPOPT
作为解算器,解算器在返回最佳条件的同时陷入局部极小值

这就是答案

So can the termination condition by itself not be trusted?

可能,因为我的测试用例不会使用可靠的全局解算器

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

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

我不确定我是否完全理解您的问题。在这里,既然SO不是一个“给我读文档”问题的网站,我想你的问题是关于使用图书馆的技术方式,所以我相信这将有助于回答你的问题,而不会听起来像我重复文档中的内容

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


因此,您不应该只依赖于解算器状态,而应该只依赖于终止条件来知道您的问题是“最优”或“maxTimeLimit”等等。但是,如果解算器出现问题,最好使用解算器状态测试解算器是否可以返回终止条件

我不确定我是否完全理解你的问题。在这里,既然SO不是一个“给我读文档”问题的网站,我想你的问题是关于使用图书馆的技术方式,所以我相信这将有助于回答你的问题,而不会听起来像我重复文档中的内容

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


因此,您不应该只依赖于解算器状态,而应该只依赖于终止条件来知道您的问题是“最优”或“maxTimeLimit”等等。但是,如果解算器出现问题,最好使用解算器状态测试解算器是否可以返回终止条件

谢谢您的回答,但我的问题是为什么Pyomo文档同时检查终止条件和解算器状态。您提到的案例实际上甚至不是IPOPT的问题;这是一个局部解算器,局部最小值是局部最优的。谢谢你的回答,但我的问题是为什么Pyomo文档同时检查终止条件和解算器状态。您提到的案例实际上甚至不是IPOPT的问题;这是一个局部解算器,局部最小值是局部最优的。谢谢你的帖子!您提出了一个有趣的观点,即如果解算器未返回终止条件,则会出现错误。但我不清楚这是否会发生。存在一个“未知”解算器状态,显然在解算器状态未初始化时使用。我刚刚看了一下,看起来文档中没有列出相应的“未知”终止条件。该文件中的注释似乎也映射了每个t