python - Python GEKKO:如何避免从 IPOPT “解决到可接受的水平”中引发错误。
问题描述
我正在求解一组模拟方程(IMODE = 1,SOLVER = 3)。IPOPT 求解器求解到可接受的水平并退出,但 gekko 为此返回错误并返回我的解决方案。根据 IPOPT 文档,可接受级别的容差为 1.0e-6,这与 gekko 使用的 OTOL 和 RTOL 的默认值(以及我正在使用的值)相同。我能够修改 gekko.py 源代码以让我的答案返回,但这样做我绕过了所有类型的错误。我不希望绕过所有错误,因为它们显然有助于调试其他问题,例如不可行性。是否有我缺少的 m.solve 选项,或者当 IPOPT 解决到可接受的水平时不触发错误的另一种方法?
解决方案
处理求解器错误的一种方法是将求解命令包装在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.json
load_JSON
gk_post_solve.py
推荐阅读
- angular - 如何在打字稿中选择键值[object:object]?
- python - MyPy - 您如何在注释中实际使用类型化存根?
- xcode - 选中时如何使此按钮取消选中所有这些框?
- django - Django 在 URL 中访问 PK/Object
- javascript - javascript:每次点击函数时都覆盖设置间隔?
- javascript - 对多维数组值求和并将它们存储在另一个数组中
- jquery - 水晶选择在第一次赢或输后登记为输
- c - NULL 是指针吗?
- macos - Google Chrome:对 MacOS 使用 --allow-file-access-from-files 标志
- r - for 循环失败,包含小于一的小数的可迭代序列