我正在尝试使用gurobi 8.0和pyomo 5.5。当解决一个简单的模型作为测试我得到以下错误: 错误:解算器日志:无法识别的标志或缺少参数:-AMPL
from pyomo.environ import *
model = ConcreteModel()
model.x = Var([1,2], domain=NonNegativeReals)
model.OBJ = Objective(expr = 2*model.x[1] + 3*model.x[2])
model.Constraint1 = Constraint(expr = 3*model.x[1] + 4*model.x[2] >= 1)
solver = SolverFactory("gurobi_cl")
results = solver.solve(model) #error here
model.solutions.store_to(results)
print(results)
答案 0 :(得分:0)
Pyomo SolverFactory
首先查看它是否具有以您提供给工厂的名称注册的自定义求解器接口。如果是,则返回该求解器接口。如果没有,那么它会查看它是否可以在匹配该名称的PATH上找到可执行文件,如果匹配,则假定可执行文件是AMPL解算器并返回ASL接口。如果这两个都失败,则返回UnknownSolver对象。
在您的具体情况下,您正在进入第二个分支。不幸的是,gurobi_cl
不是ASL二进制文件,导致您看到错误。
有几种方法可以与Gurobi进行交互:通过LP文件,通过NL文件,以及直接通过Python绑定(以单次或持久模式)。每个路由使用不同的可执行文件。 SolverFactory("gurobi")
实际上是一个包装器,它根据solver_io
标志返回这些专用解算器之一。默认值是LP文件接口,它依赖于gurobi.sh
交互式shell。
如果你的Gurobi安装中没有gurobi.sh
,你可以使用其他接口(NL接口需要gurobi_ampl
可执行文件,直接接口需要安装Python绑定你的Python环境)。对于您的安装,我将从“直接”界面开始:
solver = SolverFactory("gurobi", solver_io="direct")
# (or `solver_io="python"` in older Pyomo releases)