Один из способов обработки ошибок из решателя состоит в том, чтобы заключить команду решения в операторы 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')
Другой вариант - попробовать другой решатель, такой как APOPT или 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
находится в options.json
в каталоге выполнения при локальном запуске и считывается с load_JSON
в gk_post_solve.py
.