要在 pyomo 中实例化求解器,通常使用求解器工厂:
from pyomo.opt import SolverFactory
opt = SolverFactory('glpk')
有没有办法知道 SolverFactory 将接受哪些字符串? 解决方案如下:
print(SolverFactory.list_detected_solvers())
Pyomo 不随任何求解器一起分发,而是为按需调用的求解器提供各种接口。因此,没有求解器的主列表。
您可以使用终端命令
pyomo help -s
获得近似于所需行为的内容。您还可以检查 SolverFactory('glpk').available() == True
的各种求解器。
AMPL 和 GAMS 在其网站上提供了求解器列表。由于 Pyomo 能够连接到任一问题格式,因此您也可以将其用作参考。请记住,您的系统上仍然需要安装相关的求解器。
根据Qi Chen的回复,我想出了这个残酷的解决方案:
import pyomo.environ as pyo
from itertools import compress
pyomo_solvers_list = pyo.SolverFactory.__dict__['_cls'].keys()
solvers_filter = []
for s in pyomo_solvers_list:
try:
solvers_filter.append(pyo.SolverFactory(s).available())
except (ApplicationError, NameError, ImportError) as e:
solvers_filter.append(False)
pyomo_solvers_list = list(compress(pyomo_solvers_list,solvers_filter))
已经被创作者解决了! https://or.stackexchange.com/questions/7145/how-to-install-ipopt-on-google-colab-for-pyomo
!pip install pyomo
from pyomo.environ import *
import matplotlib.pyplot as plt
!wget -N -q "https://ampl.com/dl/open/ipopt/ipopt-linux64.zip"
!unzip -o -q ipopt-linux64
在建模代码中:
opt=SolverFactory('ipopt', executable='/content/ipopt')
这让我发疯,无论我做什么都无法让这个 ipopt 工作......看到这篇文章并认为也许这可以工作,但它没有......此时我想要任何求解器可以更好地使用连续值而不是整数来进行 NLP。
我尝试了上面的选项:
!pip install pyomo
from pyomo.environ import *
import matplotlib.pyplot as plt
!wget -N -q "https://ampl.com/dl/open/ipopt/ipopt-linux64.zip"
!unzip -o -q ipopt-linux64
我收到一条错误消息,内容如下:
[iopt-linux64.zip] 未找到中央目录结尾签名。要么这个文件不是 一个 zip 文件,或者它构成多部分存档的一个磁盘。在里面 后一种情况可以在以下位置找到中央目录和 zipfile 注释 该存档的最后一个磁盘。 unzip: 在 ipopt-linux64 或之一中找不到 zipfile 目录 ipopt-linux64.zip,并且找不到 ipopt-linux64.ZIP,期间。