【发布时间】:2020-02-21 16:50:35
【问题描述】:
我正在使用 Pyomo 5.6.8 并尝试使用 MindtPySolver 解决非线性优化问题。
我在本地机器上没有问题,只需使用以下参数调用 solve 方法:
SolverFactory('mindtpy').solve(model, mip_solver='cbc', nlp_solver='ipopt')
但是,当我在 Azure 上使用云时,Pyomo 无法获得 CBC 和 IPOPT 求解器的路径。当需要解决线性问题时,我可以使用以下命令绕过该问题,方法是在使用 LP 求解器创建 SolverFactory 实例时添加 executable 参数:
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