ERROR: Solver log: Unrecognized flag or missing argument: -AMPL

ERROR: Solver log: Unrecognized flag or missing argument: -AMPL

我正在尝试将 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)

Pyomo SolverFactory 的工作原理是首先查看它是否具有以您提供给工厂的名称注册的自定义求解器接口。如果是,它 returns 求解器界面。如果没有,那么它会查看是否可以在您的 PATH 上找到与该名称匹配的可执行文件,如果找到,它假定可执行文件是 AMPL 求解器和 returns ASL 接口。如果这两个都失败了,它 returns 一个 UnknownSolver 对象。

在您的具体情况下,您正在点击第二个分支。不幸的是,gurobi_cl 不是 ASL 二进制文件,导致您看到错误。

有几种方法可以与 Gurobi 交互:通过 LP 文件、通过 NL 文件以及直接通过 Python 绑定(在一次性或持久模式下)。这些路由中的每一个都使用不同的可执行文件。 SolverFactory("gurobi") 实际上是 returns 这些专门求解器之一的包装器,基于 solver_io 标志。默认是LP文件接口,依赖gurobi.sh交互shell.

如果您的 Gurobi 安装中没有 gurobi.sh,您可以使用其他接口(NL 接口需要 gurobi_ampl 可执行文件,直接接口需要 Python 绑定已安装到您的 Python 环境中)。对于您的安装,我将从 "direct" 界面开始:

solver = SolverFactory("gurobi", solver_io="direct")
# (or `solver_io="python"` in older Pyomo releases)