Настройка параметров ipopt через pyomo

У меня проблемы с настройкой параметров ipopt через pyomo.

Для некоторых опций можно просто использовать

executable = os.getcwd()+'/Ipopt/Ipopt/build/bin/ipopt.exe'
opt = SolverFactory("ipopt", executable=executable,solver_io='nl')
opt.options['nlp_scaling_method'] = 'user-scaling'

Это прекрасно работает. Если я попробую установить опцию «fixed_variable_treatment», то есть:

opt.options['fixed_variable_treatment'] = 'make_parameter'

я получаю следующую ошибку:

ERROR: "[base]\site-packages\pyomo\opt\base\solvers.py", 599, solve
        Solver (asl) returned non-zero return code (1)
ERROR: "[base]\site-packages\pyomo\opt\base\solvers.py", 604, solve
        Solver log:
        Unknown keyword "fixed_variable_treatment"

Я предполагаю, что это потому, что вы не можете установить все параметры через python?

Мы будем очень благодарны за любую помощь или способ преодолеть это. Спасибо


person Anthonydouc    schedule 22.08.2017    source источник


Ответы (1)


Обходной путь - использовать файл ipopt.opt, как описано на https://www.coin-or.org/Ipopt/documentation/node35.html. Файл параметров помещается в текущий рабочий каталог, в котором вызывается IPOPT.

Гейб Хакебейл ответил на проблему Github:

По умолчанию параметры отправляются в Ipopt через командную строку, но не все параметры Ipopt доступны через командную строку. Наверное, это один из них. Исторически такой вариант помещался в файл параметров с именем «ipopt.opt» в рабочем каталоге, и Ipopt выбирал его автоматически.

Совсем недавно я добавил функциональность в интерфейс Ipopt в Pyomo, чтобы написать для вас файл опций. Параметры, начинающиеся с "OF_", будут помещены во временный файл параметров (с удаленным префиксом). Я не знаю, вошло ли это в релиз.

person Qi Chen    schedule 23.08.2017
comment
Большое спасибо за создание проблемы с Github по этому поводу! Я полагал, что это будет что-то в этом роде. Попробую предложить обходные пути и посмотрим, что произойдет. - person Anthonydouc; 23.08.2017
comment
Уловка OF_ добралась до релиза, и она работает. Просто используйте OF_fixed_variable_treatment. - person Jérôme; 13.09.2019