Как указать параметры решателя GAMS через Pyomo?

Я пытаюсь решить проблему MINLP с помощью решателя ANTIGONE (лицензированного в GAMS), и у меня возникают трудности с изменением дополнительных настроек решателя.

Сначала я вызываю решатель из Pyomo следующим образом.

solver = pe.SolverFactory('gams')
solver.options['mtype']= "minlp"
solution = solver.solve(model, solver = 'antigone')

Эта часть работает так, как должна, однако ANTIGONE не может закрыть пробел в оптимальности, поэтому я хотел бы изменить некоторые из более продвинутых параметров, представленных здесь https://www.gams.com/latest/docs/S_ANTIGONE.html.

Поэтому я сначала попытался изменить вызов решателя на следующую строку.

solution = solver.solve(model, solver='antigone', add_options=['option number_of_partitions 2;'])

Однако похоже, что add_options предназначен только для встроенных опций GAMS, а не для специфичных для решателя.

В качестве примечания: при использовании этих расширенных параметров решателя в GAMS стандартной процедурой является создание файла параметров (т.е. antigone.opt), в котором мы указываем желаемые параметры.

number_of_partitions 2

antigone.opt сохраняется в том же каталоге, и файл .gms вызывает этот файл со строкой GAMS_MODEL.optfile;.

Возвращаясь к моей проблеме, при изменении этой опции из Pyomo я попробовал

solution = solver.solve(model, solver='antigone', add_options=['GAMS_MODEL.optfile;'])

но проблема в том, что Pyomo создает временный файл для решения проблемы, и, следовательно, я не могу добавить файл antigone.opt до того, как он начнет решать.

Поэтому я вижу два варианта: (i) я могу найти способ создать файл antigone.opt во временном файле через Pyomo до того, как решатель начнет решение (менее желательно, но он должен работать), или (ii) я должен напрямую изменить параметр из Pyomo (предпочтительно).

Любая помощь будет принята с благодарностью и заранее спасибо за ваше время!


person bburnak    schedule 17.09.2019    source источник
comment
Если вы не получили здесь ответа, попробуйте задать вопрос на сайте Operations Research.   -  person LarrySnyder610    schedule 20.09.2019


Ответы (1)


Возможно, этот ответ приходит для вас немного поздно, но я думаю, что это может помочь другим людям.

У меня была та же проблема, что и у вас. После долгого крестового похода и объединения множества сообщений о переполнении стека я, наконец, заставил его работать, используя только Pyomo.

Линия,

solution = solver.solve(model, solver='antigone', add_options = ['GAMS_MODEL.optfile;'])

следует заменить на,

solution = solver.solve(model, solver='antigone', add_options = ['GAMS_MODEL.optfile = 1;','$onecho > antigone.opt', 'number_of_partitions 2', '$offecho'])

Таким образом, первая опция определяет использование файла antigone.opt, а остальные строки говорят GAMS создать и записать в файл antigone.opt.

person Marius Roland    schedule 05.11.2020