我正在使用 Pyomo 5.6.8 并尝试使用
MindtPySolver
解决非线性优化问题。
我在本地计算机上没有问题,只需使用这些参数调用
solve
方法即可:
SolverFactory('mindtpy').solve(model, mip_solver='cbc', nlp_solver='ipopt')
但是,当我在 Azure 上使用云时,Pyomo 无法获取 CBC 和 IPOPT 求解器的路径。当需要解决线性问题时,我可以使用以下命令绕过该问题,方法是在使用 LP 解算器创建
executable
实例时添加 SolverFactory
参数:
SolverFactory("cbc", executable="/path/to/my/virtual/env/bin/cbc")
在我的非线性编程案例中,
MindtpySolver
不接受额外的参数。我查看了文档和源代码,找不到指定求解器路径的选项,不幸的是,我的 Azure 环境默认情况下无法识别该路径。
我尝试使用源代码中的“solver_args”选项传递选项,如下所示:
SolverFactory('mindtpy').solve(
model,
nlp_solver_args={
"executable": "/path/to/my/virtual/env/bin/ipopt"
},
mip_solver_args={
"executable": "/path/to/my/virtual/env/bin/cbc"
},
mip_solver='cbc', nlp_solver='ipopt',
)
但我仍然收到“警告:无法找到求解器所需的‘ipopt’可执行文件”之类的错误。我坚持认为所有求解器(这里是 cbc 和 ipopt)都可以在我的虚拟环境中找到。 有没有办法使用
MindtPySolver
指定求解器路径?
我也可能有同样的问题,我的优化问题是混合整数非线性程序,它必须使用
SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt')
并且求解器位于带有Apache2 WSGI服务的Django框架中,其中WSGIDaemonProcess:Conda Env。
通过Web浏览器调用api时。它将出现类似找不到“ipopt”求解器的错误。还有“glpk”解算器。 SolverFactory 允许我们只设置一个可执行文件。
顺便说一句,已经找到了如何修复它。
通过 Conda install 安装 ipopt 和插件求解器后。
只是深入 python 包并编辑原始文件。
我的路径如下:
/home/user/miniconda3/envs/py385/lib/python3.8/site-packages/pyomo/solvers/plugins/solvers/GLPK.py
/home/user/miniconda3/envs/py385/lib/python3.8/site-packages/pyomo/solvers/plugins/solvers/IPOPT.py
找到下面的函数并更改它。
def _default_executable(self):
executable = Executable('/home/user/miniconda3/envs/py385/bin/glpsol')
def _default_executable(self):
executable = Executable("/home/user/miniconda3/envs/py385/bin/ipopt")
您可以通过在终端命令中输入来找到插件求解器所在的位置
which ipopt
,which glpsol