为了账号安全,请及时绑定邮箱和手机立即绑定

Python GEKKO:如何避免从 IPOPT “解决到可接受的水平”中引发错误。

Python GEKKO:如何避免从 IPOPT “解决到可接受的水平”中引发错误。

开心每一天1111 2022-06-02 11:29:27
我正在求解一组模拟方程(IMODE = 1,SOLVER = 3)。IPOPT 求解器求解到可接受的水平并退出,但 gekko 为此返回错误并返回我的解决方案。根据 IPOPT 文档,可接受级别的容差为 1.0e-6,这与 gekko 使用的 OTOL 和 RTOL 的默认值(以及我正在使用的值)相同。我能够修改 gekko.py 源代码以让我的答案返回,但这样做我绕过了所有类型的错误。我不希望绕过所有错误,因为它们显然有助于调试其他问题,例如不可行性。是否有我缺少的 m.solve 选项,或者当 IPOPT 解决到可接受的水平时不触发错误的另一种方法?
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

处理求解器错误的一种方法是将求解命令包装在try,except语句中。APPINFO输出可以为您提供有关遇到什么类型的错误的指导,并让您对“不可行的解决方案”、“解决到可接受的水平”或其他 IPOPT 错误代码做出不同的响应。


try:

   m.solve(disp=True)

except:

   print('Solver error, looking at APPINFO')

   if m.options.APPINFO==1:

      print('APPINFO=1')

   elif m.options.APPINFO==2:

      print('APPINFO=2')

另一种选择是尝试不同的求解器,例如 APOT 或 BPOPT。


m.options.SOLVER = 1

编辑:APPINFO Gekko 引发求解器异常时,不会更新参数。请尝试以下操作debug=0:


m.solve(disp=True,debug=0)

if m.options.APPINFO!=0:

   print('Solver error, looking at APPINFO')

if m.options.APPINFO==1:

   print('APPINFO=1')

elif m.options.APPINFO==2:

   print('APPINFO=2')

我刚刚更新了 Gekko,以便远程解决方案也将绕过引发的异常并使用APPINFO信息完成对选项文件的处理。本地运行时APPINFO信息在run目录下,用in读入。options.jsonload_JSONgk_post_solve.py


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 216 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号