1. 下载与安装
我安装的是scip 7.0.2,看了一些博客装得都是很老的版本,不太清楚新老版本的差异有多大,我就图着差不多装个7.0.2就行了。我的ubuntu是18.0.4。
下载 scipoptsuite-7.0.2.tgz
然后启动终端,cd到安装包所在的文件夹,建议直接放在home/<user_name>/文件夹下
解压文件夹
tar -zxvf scipoptsuite-7.0.2.tgz
然后进入到解压的文件夹进行cmake,依次执行
cd scipoptsuite-7.0.2
mkdir build
cd build
cmake ..
make
make check
注意!在ubuntu系统下可能会在cmake ..的时候出错,CMake Error: 说缺少个cmakelist文件,原因是根据官网的安装指导,ubuntu会存在缺少一些依赖的情况,所以需要以下命令去安装依赖:
apt-get install wget cmake g++ m4 xz-utils libgmp-dev unzip zlib1g-dev libboost-program-options-dev libboost-serialization-dev libboost-regex-dev libboost-iostreams-dev libtbb-dev libreadline-dev pkg-config git liblapack-dev libgsl-dev flex bison libcliquer-dev gfortran file dpkg-dev libopenblas-dev rpm
完事cmake应该就可以用了
2. 配置环境与测试
打开bashrc
vim ~/.bashrc
在最后添加一行
export PATH="$PATH:你自己的安装路径/scipoptsuite-7.0.2/scip/build/bin"
然后
suorce ~/.bashrc
之后就可以测试一下,在终端中输入
scip
就会出现下面的内容,代表安装成功
3. 在python中使用!!!!重点
然后很多教程就会教你在pip安装对应版本的pyscipopt,但是但是,不管我怎么尝试,都是达咩,根本不行,装了也用不了,而且我要用的是pyomo调用scip,并不想用pyscipopty。
但是scip是基于ampl构建的,在python中调用时需要有一个scipampl文件,然后我就找了一些论坛的问答,找到了以下的解决方法:
首先需要cd到'scip/scipoptsuite-7.0.2/scip/interfaces/ampl/文件夹下面,依次执行如下命令:
mkdir build
cd build
cmake ..
make
完事之后,就会在scip/scipoptsuite-7.0.2/scip/interfaces/ampl/build文件夹中出现一个scipampl文件,到此就大功告成了!!!!
下面对代码进行测试:
from pyomo.environ import *
model = ConcreteModel()
# %%
model.x = Var(bounds=(1.0, 10.0), initialize=5.0)
model.y = Var(within=Binary)
model.c1 = Constraint(expr=(model.x - 4.0) ** 2 - model.x <= 50.0 * (1 - model.y))
model.c2 = Constraint(expr=model.x * (model.x) + 5.0 <= 50.0 * (model.y))
model.objective = Objective(expr=model.x**2, sense=minimize)
# SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt')
solver_path = '/home/jiangzhi/scip/scipoptsuite-7.0.2/scip/interfaces/ampl/build/scipampl'
opt = SolverFactory('scipampl', executable=solver_path).solve(model)
model.objective.display()
print('x = ', model.x())
print('y = ', model.y())
运行了一个MINLP的简单问题,求解成功。
此外我还在安装gurobi的时候遇到了很多问题,不过都解决了,有空再写写吧