使用Gurobi 8.0与Pyomo 5.5求解模型时遇-AMPL参数识别错误求助
解决Pyomo调用Gurobi时出现的
-AMPL参数错误 嘿,这个错误我之前也碰到过!问题根源很明确:你选的求解器标识不对——gurobi_cl是Gurobi的纯命令行工具,而Pyomo默认会给它传递-AMPL参数,这个参数是给Gurobi的AMPL接口用的,gurobi_cl根本不支持,所以才会抛出"Unrecognized flag"的错误。
下面给你两种快速解决的办法:
方法1:改用标准求解器标识(推荐)
直接把SolverFactory("gurobi_cl")改成SolverFactory("gurobi"),这是Pyomo和Gurobi交互的官方标准接口,不需要额外适配参数。修改后的完整代码如下:
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") results = solver.solve(model) model.solutions.store_to(results) print(results)
方法2:手动适配gurobi_cl的调用参数(不推荐)
如果你确实有特殊需求必须用gurobi_cl,可以通过指定solver_io参数,让Pyomo不要自动添加-AMPL,同时调整模型文件的输出格式。不过这种方法比较繁琐,不如方法1省心:
solver = SolverFactory("gurobi_cl") # 告诉Pyomo用LP格式传递模型,而非默认的AMPL格式 solver.options["solver_io"] = "lp" results = solver.solve(model)
额外注意事项
- 确保你的Gurobi 8.0已经正确激活许可证,且Pyomo能找到Gurobi的安装路径(如果环境变量没配置好,可能需要在
SolverFactory里手动指定executable参数,比如executable="/opt/gurobi800/linux64/bin/gurobi.sh")。
内容的提问来源于stack exchange,提问作者David Oliver
相关产品推荐
相关产品推荐

