Как использовать (/ установить) линейный решатель pardiso в ipopt с помощью фреймворка моделирования pyomo?

Я разрабатываю модель оптимизации с использованием pyomo с python (python 3 - я управляю пакетами с помощью anaconda в Windows). Мне нужно использовать нелинейный решатель ipopt. Кажется, что линейный решатель по умолчанию, используемый ipopt (mumps или ma27), относительно медленный и не многопоточен, я хочу использовать решатель pardiso для линейной части ipopt. Кажется, есть две его версии: MKL-версия pardiso и « независимая »версия - меня устраивает любой из них. - но мне не удается использовать пардизо.

У меня работает ipopt, я выбираю его для своей проблемы с pyomo:

solver = SolverFactory('ipopt')

И я выбираю pardiso в качестве линейного решателя, используя параметры ipopt.

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

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

Exception message: Selected linear solver Pardiso not available.
Tried to obtain Pardiso from shared library "libpardiso.dll", but the following error occured:
Windows error while loading dynamic library libpardiso.dll, error = 126.

Что, я думаю, означает, что решатель не установлен. Если я выберу «свинка» или ничего не укажу, все работает.

Однако в нем говорится, что решатель pardiso входит в библиотеку mkl (которая у меня есть), теперь в идеале я хотел бы знать, какие пакеты мне нужно установить из anaconda, чтобы решатель pardiso работал?

В этом сообщении говорится, что для работы необходимо добавить определенные папки библиотек Anaconda в системный путь, который я сделал

sys.path.append('C:\Programs\pkgs\mkl-2019.3-203\Library\bin')
sys.path.append('C:\Programs\pkgs\intel-openmp-2019.3-203\Library\bin')

Ничего не меняется

В качестве альтернативы я загрузил модель pardiso с https://www.pardiso-project.org/, которая дала мне 3 файла libpardiso600-WIN-X86-64.dll .exp и .lib, с которыми я не знаю, что делать или где разместить (без объяснения на веб-сайте решателя)

Спасибо за вашу помощь,


person Jean Martin    schedule 28.05.2019    source источник


Ответы (1)


В этой версии Ipopt он ищет файл libpardiso.dll. Итак, если у вас есть libpardiso600-WIN-X86-64.dll, переименуйте его в libpardiso.dll и убедитесь, что его можно найти.
В Ipopt 3.14 будет опция 'pardisolib', чтобы указать имя (возможно, включая путь) библиотеки pardiso.

Чтобы загрузить Pardiso из MKL, возможно, попробуйте скопировать mkl_rt.dll в libpardiso.dll.

person stefan    schedule 18.05.2021