无法在 macbook 上为 python 安装 gurobi

Cannot install gurobi for python on macbook

我用anaconda安装gurobi

  1. 我安装了gurobi软件
  2. 我安装anaconda
  3. 我已经拥有 gurobi 的学术许可证。

然后我用 anaconda 为 python 3.6.3 创建一个环境。 安装gurobi后找不到gurobipy包

我不知道为什么会这样....


具体:

Last login: Wed Nov 29 01:39:25 on ttys000
appledeMacBook-Pro-5:~ apple$ source activate python36
(python36) appledeMacBook-Pro-5:~ apple$ conda install gurobi
Fetching package metadata .............
Solving package specifications: .

# All requested packages already installed.
# packages in environment at /Users/apple/anaconda3/envs/python36:
#
gurobi                    7.5.2                    py36_0    gurobi
(python36) appledeMacBook-Pro-5:~ apple$ 

当我使用pycharm

from gurobipy import *

try:
    # Create a new model
    m = Model("mip1")
    # Create variables
    x = m.addVar(vtype=GRB.BINARY, name="x")
    y = m.addVar(vtype=GRB.BINARY, name="y")
    z = m.addVar(vtype=GRB.BINARY, name="z")
    # Set objective
    m.setObjective(x + y + 2 * z, GRB.MAXIMIZE)
    # Add constraint: x + 2 y + 3 z <= 4
    m.addConstr(x + 2 * y + 3 * z <= 4, "c0")
    # Add constraint: x + y >= 1
    m.addConstr(x + y >= 1, "c1")
    m.optimize()
    for v in m.getVars():
        print(v.varName, v.x)
        print('Obj:', m.objVal)
except GurobiError:
    print('Error reported')

结果是

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我发现肯定是anaconda有问题。我将包从 anaconda 复制到其他环境并且它有效。一定有一些包与 gurobi 冲突。这就是退出代码 139 的原因。我还在 anaconda 中安装了 mosek。这个solver可以在anaconda的环境下工作。

from cvxpy import *
import mosek


# Create two scalar optimization variables.
x = Variable()
y = Variable()

# Create two constraints.
constraints = [x + y == 1,
               x - y >= 1]

# Form objective.
obj = Minimize(square(x - y))

# Form and solve problem.
prob = Problem(obj, constraints)
prob.solve(solver=MOSEK)

# The optimal dual variable (Lagrange multiplier) for
# a constraint is stored in constraint.dual_value.
print("optimal (x + y == 1) dual variable", constraints[0].dual_value)
print("optimal (x - y >= 1) dual variable", constraints[1].dual_value)
print("x - y value:", (x - y).value)
print(installed_solvers())

结果是

/Users/apple/anaconda3/envs/python36/bin/python "/Users/apple/Documents/GitHub/optimal-transport/作业/homework 5/practice.py"
optimal (x + y == 1) dual variable -0.0
optimal (x - y >= 1) dual variable 2.00000600065164
x - y value: 1.0000000011

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

anaconda 中的包

CVXcanon    0.1.1   0.1.1
Mosek   8.1.33  7.0.123
ca-certificates 2017.08.26  
certifi 2017.11.5   2017.11.5
cvxcanon    0.1.1   
cvxpy   0.4.9   0.4.11
dill    0.2.7.1 0.2.7.1
ecos    2.0.4   2.0.5
ecos    2.0.5   2.0.5
fastcache   1.0.2   1.0.2
gurobi  7.5.2   
intel-openmp    2018.0.0    2018.0.0
libcxx  4.0.1   
libcxxabi   4.0.1   
libedit 3.1 
libffi  3.2.1   
libgcc  4.8.5   
libgfortran 3.0.1   
mkl 2018.0.1    2018.0.0
multiprocess    0.70.4  0.70.5
ncurses 6.0 
numpy   1.13.3  1.13.3
openssl 1.0.2m  
pip 9.0.1   9.0.1
python  3.6.3   
readline    7.0 6.2.4.1
scipy   1.0.0   1.0.0rc2
scs 1.2.6   2.0.1
setuptools  36.5.0.post20170921 38.2.3
setuptools  36.5.0  38.2.3
six 1.11.0  1.11.0
sqlite  3.20.1  
tk  8.6.7   
toolz   0.8.2   0.8.2
wheel   0.30.0  0.30.0a0
xz  5.2.3   
zlib    1.2.11  

将 Gurobi 与 Anaconda Python 一起使用的最简单方法是使用从 the instructions 安装的 Conda。

  • 激活您要使用的 Anaconda 环境。如果你的root环境是3.6.3,那么什么都不用做。
  • 安装 Gurobi。
  • 在终端中打开 Gurobi 并用

    复制你的密钥
    grbgetkey your_gurobi_key
    
  • 将 gurobi 频道添加到 conda 使用的存储库列表中

    conda config --add channels http://conda.anaconda.org/gurobi
    
  • 安装 Gurobi Anaconda Python 库

    conda install gurobi
    
  • 检查您在 iPython 中的安装:

    m = grb.Model()
    vars = [m.addVar(name="x." + str(i)) for i in range(n)]
    m.update()
    constrs = [m.addConstr(vars[i] <= i) for i in range(n)]
    m.update()
    retval = m.optimize()
    

或使用此 simple script 检查是否安装了库和许可证:

python abrecheck.py

这可能与一些报告的问题有关 运行 Gurobi 7.5+ 和 Anaconda with python 3.x on macOS/linux(不确定确切的版本)。

例如这个讨论 https://groups.google.com/forum/#!topic/gurobi/6lw13VjvXsE

不确定到底是什么配置组合破坏了它,但在遇到这个段错误问题后,我已经可以使用 python 2.7 了。

conda info...

      conda version : 4.5.0
conda-build version : 3.7.2
     python version : 2.7.14.final.0
           platform : osx-64
         user-agent : conda/4.5.0 requests/2.18.4 CPython/2.7.14 Darwin/17.5.0 OSX/10.13.4

conda list...
gurobi                    7.5.2                    py27_0    gurobi

我读到降级版本的 anaconda 但仍然保留 python 3.x 也可能有效,但无法重复该解决方案。