Изменение параметров Bonmin (линейный решатель IPOPT) в Pyomo

Я использую Bonmin через Pyomo / Python на машине с Windows. Bonmin использует двоичные файлы, а также решатели HSL. Я мог бы успешно изменить решатель по умолчанию для Bonmin, но IPOPT все еще использует MUMPS в качестве линейного решателя.

Я попытался включить файл bonmin.opt в папки (исполняемый файл Bonmin или файл .py), но Pyomo не интерпретирует его.

Для назначения линейного решателя Bonmin я использую следующую командную строку:

solver.options ['linear_solver'] = 'ma27'

Чтобы назначить линейный решатель IPOPT в Bonmin, я пробовал много разных команд, но не смог найти ни одной из них. Примеры включают:

solver.options ['ipopt.linear_solver'] = 'ma27'

solver.options ['ipopt_linear_solver'] = 'ma27'

А также много другого другого синтаксиса. Я просмотрел руководства Bonmin и IPOPT, но все равно получаю такое же предупреждение, если синтаксис принят:

ПРИМЕЧАНИЕ. По умолчанию вы используете Ipopt с линейным решателем MUMPS. Другие линейные решатели могут быть более эффективными (см. Документацию Ipopt).

В противном случае синтаксис даже не принимается.

Есть ли у вас какие-либо предложения?


person Gebbran    schedule 20.04.2020    source источник


Ответы (1)


Согласно документации BONMIN здесь, если вы хотите установить параметры для Ipopt (при использовании внутри BONMIN), вы должны установить их в файле bonmin.opt.

Что-то вроде этого могло бы, хоп

import pyomo.opt
with pyomo.opt.SolverFactory("bonmin") as solver:
    solver.options.option_file_name = "bonmin.opt"
    with open("bonmin.opt", "w") as f:
        # f.write() # Here you can specify options for BONMIN using the "bonmin." prefix
        f.write("linear_solver ma27\n") # This is the IPOPT option
    solver.solve(model)

Дополнительную информацию о файлах опций для IPOPT можно найти здесь.

person gmavrom    schedule 20.04.2020
comment
Спасибо, это было так близко, как я мог запустить код с ma27 - но теперь я получаю следующее предупреждение. Затем он использует MUMPS в качестве линейного решателя вместо MA27. ПРЕДУПРЕЖДЕНИЕ: Пытался установить для опции linear_solver значение ma27, но предыдущее значение установлено, чтобы запретить затирание. Значение останется таким: linear_solver ma27. - person Gebbran; 26.10.2020