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