使用 Pyomo MindtPySolver 设置 MIP 和 NLP 求解器路径

问题描述 投票:0回答:1

我正在使用 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
指定求解器路径?

optimization pyomo nonlinear-optimization
1个回答
1
投票

我也可能有同样的问题,我的优化问题是混合整数非线性程序,它必须使用

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 包并编辑原始文件。

我的路径如下:


  1. /home/user/miniconda3/envs/py385/lib/python3.8/site-packages/pyomo/solvers/plugins/solvers/GLPK.py

  2. /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

© www.soinside.com 2019 - 2024. All rights reserved.