Pyomo 无法使用 gurobi 求解器

Pyomo can't use gurobi solver

我已经完成了一个在使用“glpk”求解器时运行良好的程序,并且我能够获得预期的结果,因此我相信该程序可以运行。以下是代码。

import pandas as pd
from pyomo.environ import *
import numpy as np


rawfile = "C:/Users/User/Downloads/chickenwings2.csv"

df_raw = pd.read_csv(rawfile, index_col='Name')
print (df_raw)

Set = df_raw.index.tolist()
count = dict(zip(df_raw.index,df_raw['count']))
price = dict(zip(df_raw.index,df_raw['price']))

#print (count,price)

model = ConcreteModel()
model.x = Var(Set, within=NonNegativeIntegers)

model.obj = Objective(expr= sum(price[i]*model.x[i] for i in Set), sense=minimize)

model.count_con = Constraint(expr=sum(count[i]*model.x[i] for i in Set) == 200)

opt = SolverFactory("glpk") 
opt_success = opt.solve(model)

total_count = sum(count[i]*value(model.x[i]) for i in Set)
print('Total Count:', total_count)
print('Total Price:', value(model.obj))

print('%5s %5s %12s' % ('Set','Count', 'Order Count'))
print('=========================')

for i in Set:
    if value(model.x[i]>0):
        print ('%5s %5s %5s' % (i,count[i], value(model.x[i])))

print('=========================')

但是,当我尝试通过如下所示更改代码来使用 gurobi 求解器时,我无法获得任何结果。

opt = SolverFactory("gurobi", solver_io="python") 

opt = SolverFactory("gurobi")

错误:

Traceback (most recent call last):
  File "D:/Python learning/ProjektX/chicken wings.py", line 26, in <module>
    opt_success = opt.solve(model)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_solver.py", line 68, in solve
    self.available(exception_flag=True)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_or_persistent_solver.py", line 301, in available
    "plugin").format(type(self)))
pyutilib.common._exceptions.ApplicationError: No Python bindings available for <class 'pyomo.solvers.plugins.solvers.gurobi_direct.GurobiDirect'> solver plugin

WARNING: Could not locate the 'gurobi' executable, which is required for
    solver gurobi

对于 gurobi 的安装,我已经按照使用 anaconda 的 gurobi 安装程序进行了操作

conda config --add channels http://conda.anaconda.org/gurobi
conda install gurobi

我创建了一个名为 GRB_LICENSE_FILE 的环境变量,并将变量值指向 .lic 文件的位置。

我已经用尽了我可以从互联网上找到的所有选项,因此我请求 pyomo 社区的帮助,以启发我解决这个问题。

听起来您需要将包含 gurobi 可执行文件的文件夹添加到您的 Windows 和 Anaconda 路径中。

请参阅此 Whosebug post 以获取有关如何执行此操作的分步指南:

查看此 post 以将文件夹添加到您的 conda 路径:

关于您尝试使用此行的 Gurobi Python 界面:

opt = SolverFactory("gurobi", solver_io="python")

你可能会得到

Traceback (most recent call last):
  File "D:/Python learning/ProjektX/chicken wings.py", line 26, in <module>
    opt_success = opt.solve(model)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_solver.py", line 68, in solve
    self.available(exception_flag=True)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_or_persistent_solver.py", line 301, in available
    "plugin").format(type(self)))
pyutilib.common._exceptions.ApplicationError: No Python bindings available for <class 'pyomo.solvers.plugins.solvers.gurobi_direct.GurobiDirect'> solver plugin

错误。导致此类错误的原因之一是必须安装 Gurobi 的 Python 绑定。此绑定随 Gurobi 安装一起提供,但默认情况下未安装。如果您已经拥有有效的 Gurobi 许可证,我建议您访问

http://www.gurobi.com/documentation/8.1/quickstart_mac/the_gurobi_python_interfac.html

总结支持页面,

  1. 使用管理员权限打开命令提示符;
  2. 导航到安装 Gurobi 的文件夹;
  3. 键入 python setup.py install 到 运行 安装 Python 绑定。

您可以通过在 Python 控制台中输入行 import gurobipy 来检查它是否已安装。

我已经尝试将文件夹添加到 windows 和 anaconda 路径(错误代码仍然存在)并且我尝试安装 gurobipy(Gurobi 包中没有 setup.py 文件)。

然而,我使用 Pycharm 到 运行 代码,但是 user guide 明确提到使用 Spyder IDE 或 Jupyter,所以我将代码导入Spyder 和我可以让代码工作。它甚至可以使用 ["gurobi"]["gurobi", solver_io="python"] 作为求解器。

Pycharm + gurobi 似乎有一些问题。