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

时间:2019-09-19 21:14:15

标签: python gekko

我正在仿真中求解一组方程(IMODE = 1,SOLVER = 3)。 IPOPT求解器求解到可接受的水平并退出,但是gekko为此返回了一个错误并返回了我的解决方案。根据IPOPT文档,可接受水平的公差为1.0e-6,与gekko使用的OTOL和RTOL的默认值相同(以及我使用的值)。我能够修改gekko.py源代码以得到返回的答案,但是这样做避免了所有类型的错误。我不希望绕过所有错误,因为它们显然有助于调试其他问题,例如不可行。是否有我缺少的m.solve选项,或者是IPOPT解决到可接受水平时不触发错误的另一种方法?

1 个答案:

答案 0 :(得分:2)

处理来自求解器的错误的一种方法是将solve命令包装在CREATE TRIGGER zkontrolujMnožství ON Zboží INSTEAD OF DELETE AS BEGIN IF (EXISTS (SELECT 1 FROM deleted WHERE množstvíSklad < 0) EXECUTE vyvolej_chybu_sp 15; -- Raise error ELSE DELETE FROM Zboží WHERE zbožíID IN (SELECT zbožíID FROM deleted); END; try语句中。 APPINFO的输出可以为您提供指导,说明遇到了什么类型的错误,并让您对“不可行的解决方案”,“解决到可接受的水平”或other IPOPT error codes做出不同的响应。

except

另一个选择是try a different solver such as APOPT or BPOPT

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')

编辑:当Gekko引发求解器异常时,不会更新参数m.options.SOLVER = 1 。使用APPINFO尝试以下操作:

debug=0

我刚刚更新了Gekko,以便远程解决方案也可以绕过所提出的异常,并使用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') 信息完成对选项文件的处理。本地运行时,APPINFO信息位于运行目录的APPINFO中,并由options.json中的load_JSON读取。