COIN-OR
(Computational Infrastructure for Operations Research) 开发的线性规划求解器。该基金会开发了大量的运筹学工具,截止 2011 年,已经开发并维护了 48 个项目。
CBC 有很多安装方案,这里仅介绍笔者实验成功过的 Git 源码安装的方式,其他方式可以参考
官方文档
。
假设我们想要安装稳定的 2.9 版本,cd 到我们想要安装 CBC 的目录,然后执行:
1
|
git clone --branch=stable/2.9 https://github.com/coin-or/Cbc Cbc-2.9
|
下载完 CBC 源码后还要下载相应的依赖,否则会报错:
1 2 3
|
cd Cbc-2.9 git clone --branch=stable/0.8 https://github.com/coin-or-tools/BuildTools ./BuildTools/get.dependencies.sh fetch
|
有了源码和依赖,我们就可以执行典型的 Linux 源码安装步骤了:
1 2 3 4 5
|
mkdir build cd build ../configure make make install
|
CBC 有一个 COIN-OR 官方开发的 Python 接口 CyLP。安装方法可以参考
官方文档
,不过按照教程,笔者尝试了各种方法都没有成功,这里就不详细讲解了。如果有人安装成功了,可以在评论区分享你的经验。
链接
,点击 add to cart,会跳转到登录和注册页面,此时可以用自己的教育邮箱注册一个账号,然后就可以免费获得 CPLEX 了。CPLEX 在 MacOS 上的安装非常简单,在自己的账户下载安装包,双击安装包,按提示一步步安装好就行。
CPLEX 提供了官方 python 接口,需要通过安装文件里的 setup.py 文件进行安装,具体方法为 cd 到 CPLEX 的安装目录,然后运行 setup.py 进行安装:
1 2
|
cd cplex_home_path/python python setup.py install
|
直接运行 setup.py 将把 python 接口安装到默认位置,如果想要指定安装目录,可以指定 –home 参数:
1
|
python setup.py install --home python_package_home/cplex
|
我一直使用 pyenv 来管理 python 环境(使用方法可以参考我之前的
博客
),所以在我的电脑上,python_package_home 一般在
~/.pyenv/versions/anaconda/lib/python/site-packages/cplex
。使用这种方法,python 文件放在 CPLEX python 目录下的
cplex/bin/python/cplex
里面,在程序里面直接 import cplex 无法识别,需要把里层 cplex 目录里面的文件复制到外层 cplex 目录:
1
|
cp -ri path_to_site-packages/cplex/bin/python/cplex/* path_to_site-packages/cplex/
|
这样就可以正常 import cplex 了,具体的编程方法可以参考
[5]
。
官网
下载相应版本,然后根据
readme
的步骤安装。在 MacOS 下直接双击安装包就行。GUROBI 也提供了教育版 license
[7]
,利用教育邮箱就能申请到一个有效的 license,然后根据官方教程安装即可使用。
GUROBI 的 python 接口可以直接使用 conda 来安装:
1 2
|
conda config --add channels http://conda.anaconda.org/gurobi conda install gurobi
|
具体编程方法可以参看
[13]
。
[8]
,包括
GLPK
,
MOSEK
和
DSDP
。
CVXOPT 的使用方法可以参考它的官方文档
[9]
。
[10]
,然后解析结果。对于线性规划问题,可以调用外部的 CBC, GLPK, CPLEX, GUROBI, MOSEK 等。需要注意的是,当需要调用 CBC 时,必须先安装其官方 python 接口 CyLP;当需要调用 CPLEX 时也需要先安装其官方 python 接口。
CVXPY 的建模过程非常直观,可以使用 numpy 的 ndarray。具体使用方法可以参考它的官方文档
[11]
[12]
[1]
。
GLPK 对于变量规模很大的线性规划问题求解速度非常慢。
CPLEX 求解大规模线性规划问题非常快,但是使用官方提供的方法建模时间非常长。实际测试,在变量规模为 65536 时,建模花费 20s 左右,求解花费不到 1s。当使用 CVXPY 调用 CPLEX 时,同样规模一共花费 5s 左右,推测主要时间也是花费在建模上面。
比较 CVXPY 调用默认求解器,CPLEX, GUROBI,发现速度差距不大,相对来说 GUROBI 可能会稍微好一点。
Comparison of Open-Source Linear Programming Solvers
[2]
CBC install
[3]
Linear Programming in Python with CVXOPT
[4]
CLPEX for student
[5]
Using the python API
[6]
Installation tutorial
[7]
Gurobi For Universities
[8]
Linear programming for cvxopt
[9]
CVXOPT tutorial
[10]
Choosing a solver for CVXPY
[11]
CVXPY tutorial
[12]
PuLP tutorial
[13]
GUROBI python interface
发布时间:
2018年10月27日 - 09:34:13
最后更新:
2020年05月16日 - 01:49:08
原始链接:
http://zhangzhk.com/2018/10/27/summary-linear-programming-solver/
许可协议:
署名-非商业性使用-禁止演绎 4.0 国际
转载请保留原文链接及作者。