我正在开发一个使用pyomo和python的优化模型(python 3-i manage packages with anaconda on windows)。我需要使用非线性求解器ipopt。似乎ipopt (mumps或ma27)使用的默认线性求解器相对较慢且不可线程,我希望使用pardiso求解器来处理ipopt的线性部分。它似乎有两个版本:MKL-intel pardiso version和"independent" version -我对它们中的任何一个都很满意。-但我不能使用pardiso。
我让ipopt工作,我选择它来解决我的pyomo问题:
solver = SolverFactory('ipopt')我使用ipopt选项选择'pardiso‘作为线性求解器
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.我猜这意味着没有安装求解器。如果我选择“mumps”或者不指定任何东西,一切都会正常工作。
但是它说pardiso解算器位于mkl库(我有)中,现在理想情况下,我想知道我必须从anaconda安装哪些包才能使pardiso解算器工作?
This post规定,为了正常工作,必须将特定的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')什么都没变
或者,我从https://www.pardiso-project.org/下载了pardiso模型,它给了我3个文件libpardiso600-WIN-X86-64。do .exp和.lib,我不知道用它们做什么或放在哪里(在求解器网站上没有解释)
谢谢你的帮忙,
发布于 2021-05-18 21:29:00
在此版本的Ipopt中,它查找文件libpardiso.dll。因此,如果您有libpardiso600-WIN-X86-64.dll,请将其重命名为libpardiso.dll,并确保可以找到它。
在Ipopt 3.14中,将有一个选项'pardisolib‘来指定pardiso库的名称(可能包括路径)。
要从MKL加载Pardiso,也许可以尝试将mkl_rt.dll复制到libpardiso.dll。
https://stackoverflow.com/questions/56338142
复制相似问题