Centos7安装SCIP求解器

SCIP介绍

SCIP is currently one of the fastest non-commercial solvers for mixed integer programming (MIP) and mixed integer nonlinear programming (MINLP). It is also a framework for constraint integer programming and branch-cut-and-price. It allows for total control of the solution process and the access of detailed information down to the guts of the solver.

背景介绍

公司最近有算法项目(python3.6)需要部署在centos7服务器上,经过跟算法工程师沟通发现,部署算法项目有一个特别重要的东西就是求解器,本项目中用到了两个求解器cplex和scip,经过部署发现,cplex求解器安装比较简单,可以查看我的另一篇博客 https://blog.csdn.net/weixin_39080216/article/details/114389788 , 比较复杂的就是scip,所以重点介绍。

安装求解器算法工程师给了一个测试求解器demo如下:

# encoding=utf-8
import numpy as np
import pandas as pd
from pyomo.environ import *
import pyutilib.subprocess.GlobalData
pyutilib.subprocess.GlobalData.DEFINE_SIGNAL_HANDLERS_DEFAULT = Falsedef object_func(model):return model.x + model.ydef constraint_01(model):return model.x * model.y >= 10model = ConcreteModel(name="cplex_test")
model.x = Var(bounds=(1,5),within=NonNegativeReals,initialize=1)
model.y = Var(bounds=(1,5),within=NonNegativeReals,initialize=1)model.cons = ConstraintList()
model.cons.add(constraint_01(model))
model.obj = Objective(rule=object_func, sense=maximize)//ampl编译后可执行文件绝对路径
solver_path = '/root/scip/scipoptsuite-5.0.0/scip/interfaces/ampl/bin/scipampl'
opt = SolverFactory('scipampl', executable=solver_path)results = opt.solve(model, tee=True)
results.write()
print(model.x.value)
print(model.y.value)

由于网上关于scip安装的帖子都是结合PySCIPOpt使用,我也根据网上的帖子成功安装了scip和PySCIPOpt https://blog.csdn.net/weixin_42690752/article/details/108429040 ,(此帖子在实际安装过程中也遇到了一些问题,稍后再写一篇博客专门介绍)
但是算法工程却要求不使用PySCIPOpt,必须使用pyomo,一是、使用PySCIPOpt相对编码比较复杂,二、由于项目中使用了两个求解器,为了使代码保持统一,所以放弃了使用PySCIPOpt。

由于之前算法是运行在windows系统上的,通过测试demo就可以看出,solver_path的值就是求解器的可运行程序路径。但是通过实际部署发现,cplex安装成功后,直接可以在安装目录下bin文件下找到一个cplex程序,以此路径作为solver_path即可执行成功。但是scip经过上面介绍的博客安装成功后,能找到可执行文件,却一直报错,在网上找了好多资料也没有解决。

最终通过请教别人,自己查阅资料还是解决了部署的问题,由于本人是java后台工程师,兼职干一点部署的活,一下子遇到了这么复杂的部署,最终虽然解决了问题,但是整个过程还是有很多不理解,等使用过程中了解的更多以后再补充。

下载地址

https://www.scipopt.org/index.php#download
此处简单说明一下 ,根据官网介绍scipopsuite中包含了scip 所以此处选择下载scipoptsuite源码,版本:5.0.0

解压

将下载的scipoptsuite-5.0.0.tgz 进行解压:

tar -zxvf scipoptsuite-5.0.0.tgz

Python安装

由于公司项目需要,Python大版本必须是3.6,因为网上关于Python教程多如牛毛,此处就不在赘述,贴出我安装使用的教程链接:https://www.cnblogs.com/yangzhaon/p/11203395.html

安装依赖

sudo yum install -y gmp-devel  gcc-c++  zlib-devel  readline-devel

由于在Python安装过程中已经安装了zlib-devel readline-devel所以只需要安装前面两个即可。

编译scip

cd scipopsuite-5.0.0make

此处编译过程中问题较多,针对遇到的问题简单整理下:

1. g++ 命令未找到

sudo yum install -y gcc-c++

2. gmp.h没有那个文件或目录

sudo yum install -y gmp-devel

3. zlib.h: 没有那个文件或目录

sudo yum install -y zlib-devel

4. readline/readline.h:没有那个文件或目录

sudo yum install -y readline-devel

5. /usr/bin/ld: cannot find -lc

sudo yum install -y glibc-static libstdc++-static

编译ampl

cd scip/interfaces/ampl/./get.ASL cd solversmake -f makefile.ucd .. make

如果是在以Centos7为基础镜像的容器里面执行./get.ASL会报

Utility wget not found in your PATH.

使用命令安装wget

yum -y install wget

发现依然这个错,我们打开get.ASL文件查看发现了一个判断语句如下图所示:

我们将红线框内的语句在命令行执行,发现为0,然后直接使用which命令查找wget

which get

发现容器内没有which命令,但是容器内有whereis命令,我们只需将该文件内的which改为whereis即可。

测试

命令测试

cd bin./scipampl

如果出现以下结果说明安装成功:

代码测试

1. requirements.txt

numpy
pandas
pyomo
pyutilib

2. 安装依赖

pip3 install  --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple -r requirements.

3. 代码运行

python3 cplex_test.py 

4. 运行结果
出现以下结果说明部署成功,并且求解成功:

Centos7安装SCIP with AMPL相关推荐

  1. ubuntu安装SCIP,并在pyomo中调用

    1. 下载与安装 我安装的是scip 7.0.2,看了一些博客装得都是很老的版本,不太清楚新老版本的差异有多大,我就图着差不多装个7.0.2就行了.我的ubuntu是18.0.4. 首先去官网下载安装 ...

  2. centos7 nginx配置php7,centos7安装并配置nginx+php,centos7nginx

    centos7安装并配置nginx+php,centos7nginx centos7安装并配置nginx+php 安装nginx yum install nginx 设置nginx开启起动 syste ...

  3. centos7安装配置pgAgent

    centos7安装pgagent: 默认cmake已经安装 编译wxGTK https://excellmedia.dl.sourceforge.net/project/wxwindows/2.8.7 ...

  4. centos7 安装mysql php_Centos7安装mysql与php的方法

    本文主要和大家分享Centos7安装mysql与php的方法,希望能帮助到大家. 相关mysql视频教程推荐:<mysql教程> 官网下载安装mysql-server 依次使用下面三个命令 ...

  5. Centos7安装Apache和PHP,包含配置过程

    本文主要讲的是本人在迁移php网站相关软件的安装和配置过程,以及一下问题的解决步骤.通过阅读本文能够知道如何迁移php网站,如何配置httpd服务使得它能够解析php文件以及如何解决迁移过程中的异常问 ...

  6. LINUX CentOS7安装字体库

    LINUX CentOS7安装字体库 2017年12月26日 17:06:07 q260996583 阅读数:4866更多 个人分类: linux JAVA画图时常用到Font 类对象 这样的对象依赖 ...

  7. centos7安装mysql缺失依赖_CentOS7安装mysql5.7不成功,解决依赖包之后还是无法安装成功...

    [root@xg79 ~]# yum -y installmysql-community-server ............. Error: Package:mysql-community-ser ...

  8. linux tomcat7怎么安装,centos7安装Tomcat7,

    centos7安装Tomcat7, 一.环境 centos7 linux apache-tomcat-7.0.92.tar.gz:链接:https://pan.baidu.com/s/1-clhIjD ...

  9. CentOS7安装CDH 第三章:CDH中的问题和解决方法

    CentOS7安装CDH 第三章:CDH中的问题和解决方法 参考文章: (1)CentOS7安装CDH 第三章:CDH中的问题和解决方法 (2)https://www.cnblogs.com/yang ...

  10. centos7 安装 xfce桌面

    最小化centos7安装后 1.先安装桌面协议,执行命令yum groupinstall -y "X Window system" 2.执行yum install -y epel- ...

最新文章

  1. 在Eclipse中关联Android Private Libraries中文件的源代码
  2. UVa910 TV game
  3. (转)动态规划和贪心算法的区别
  4. plsql导出表结构_mysqldump命令详解 Part 5-按条件备份表数据
  5. maven启动web服务报错原因
  6. linux 如何避免进程killed_Linux 内核 / 进程管理 / 如何描述一个进程?
  7. 一条 update 语句引起的事故,这回可以长长记性了
  8. 树莓派计算机视觉环境搭建
  9. 淘宝商城事件:中小卖家缺失的互联网信任
  10. ExtJs学习笔记——Ext.grid.EditorGridPanel的使用
  11. 单核CPU破解后量子加密候选算法只需一小时
  12. Vcc(电源)和GND(地)之间接电容的作用
  13. Django项目于之在线教育平台网站的实战开发(一)
  14. 关于消防设施的RFID资产管理,RFID消防设施资产管理-新导智能
  15. “无法连接到打印机。您输入的打印机名不正确 或者指定的打印机没有连接到服务器上”终极解决方法
  16. hfs支持php文件系统,HFS+文件系统的分配文件分析
  17. Java实现树状结构解析
  18. VS+QT——二维码生成(使用nayuki第三方库):从建工程开始
  19. 互联网To B这一年:雷声大雨点小
  20. 数据科学比赛经历分享——风机开裂故障预警比赛

热门文章

  1. java实验报告的原理_JAVA实验报告
  2. linux系统下安装GCC编译器
  3. mysql 定义游标_mysql 游标的使用
  4. 汉诺塔函数python_Python使用函数模拟“汉诺塔”过程
  5. 凸包算法详解(Graham扫描法)
  6. 火山软件开发访问网页查找电话号和读写文件应用
  7. Java实现Unicode编码和中文互转
  8. GNS3 VM 的安装使用和路由器的添加
  9. Think PHP(TP)框架基础知识
  10. 由于焦点冲突导致TextView的跑马灯效果和EditText不能共存的问题