因本人科研需要,需要使用这两个求解器解数学模型。

本人的实现平台为window10,64位,基于C++,且之前已安装Visual Studio 2015. 但是SCIP的使用建议使用Linux,感觉可能没有这么多bug,且晚上的资料大部分是基于Linux的,window的较少,出现bug时较难debug。

1.SCIP的失败使用

SCIP的使用的基础教程可以参考https://www.cnblogs.com/dengfaheng/p/10041488.html,应该是已经相当详细了。

本文主要面向如何利用SCIP提供的interface进行coding。

a. 首先讲一个最接近成功的使用方法

SCIP官网提供了三种下载使用SCIP的方式,分别为:(1)optsuite, (2)source code, 还有(3)optsuite redistributable package。optsuite和source code都是开源的,redistributable package下载下来后,按照https://www.cnblogs.com/dengfaheng/p/10041488.html上面的教程就可以直接用SCIP的interactive shell来求MILP问题。但这里需要注意的是,如果我们是coding, 或者自己重新编译example programs的话,其实用的是第一个下载链接(敲黑板)。

这里主要讲optsuite的安装。解压后,在Window CMD中进入安装路径的根目录,按如下cmd命令写。

cmake -Bbuild -H. [-DSOPLEX_DIR=path/to/soplex]
cd build
del CMakeCache.txt
cmake .. -G "Visual Studio 14 2015 Win64"
cd ..
cmake --build . --config "Release"

这里的第一行代码是SCIP document上有介绍的,但是后续要按后面的步骤完成才可以成功编译。这里关键的因素是需要设置使用win64的编译器编译。这里最后一行代码相当于document上的第二行代码(document的原有cmd命令如下,感觉是适用于32位系统的,还搁这说是system independent...)

cmake -Bbuild -H. [-DSOPLEX_DIR=/path/to/soplex]
cmake --build build

这里的可选参数path/to/soplex需要设成文件夹中的soplex路径,一般是.\soplex。 另外由于我是使用VS2015,因此有这样的命令。这些命令的参数的意义,可以搜一下cmake的参数。这里的第一、四行代码,相当于VS里面的“生成解决方案”,只是使用的编译器不同,其实完全可以用一条指令代替:

cmake -Bbuild -H. [-DSOPLEX_DIR=path/to/soplex] -G "Visual Studio 14 2015 Win64"

这里大费周章的这样搞是想告诉同学们,第二次编译时需要删掉上次的编译缓存,CMakeCache.txt才可以编译。

这些命令在我的笔记本上可以成功编译出scip.exe文件(但是编译出scip.exe,还是不能按document->Getting start->how to start a new project那样编译example program且自己已试过使用其他的命令, 不懂)。值得注意的是,这些命令在台式机上又不行了。。。仍然有一个LINK 2019的编译错误。。。唉,一周光阴已挥霍完了。

b. 下面讲的是我的debug经历,因为最后结果也是失败的,赶时间的同学可以跳过,到GLPK的章节

按照SCIP官网文档(https://www.scipopt.org/doc/html/MAKE.php    记得选对应的版本document )->how to start a new project->building with CMake  以VRP问题为example测试,遇到以下问题,无法找到兼容的SCIP package.

原因:

1. 由于SCIP官网提供了三种下载使用SCIP的方式,分别为:(1)optsuite, (2)source code, 还有(3)optsuite redistributable package。由于这三个文件我是一起下载下来的,且完成了optsuite redistributable package的安装过程,所以我之前一直以为自己是已经安装了SCIP,并一直在optsuite redistributable package的目录中捣腾,所以一直无法编译成功。其实这只是完成了interactive shell的安装。若想完成how to start a new project->building with CMake 这个步骤(因为我们关注点是使用SCIP进行coding),还需要在optsuite里面还要执行一次cmake编译才算在optsuite里面完成了安装(最好把之前安装interactive shell时修改的系统变量path中的对应值也删掉,不然安装optsuite时会一直找不到package, 即soplex-config.cmake文件)。

(这里的path/to/soplex直接写为optsuite目录下的soplex目录)build好optsuite的build文件(我们指定build到一个“build"文件)后会发现目录下多了好多文件。

2. 对cmakelist文件的分析

VRP的CMakeList文件为:

cmake_minimum_required(VERSION 3.3)project(VRP)find_package(SCIP REQUIRED)
include_directories(${SCIP_INCLUDE_DIRS})add_executable(vrpsrc/main_vrp.cppsrc/pricer_vrp.cpp)target_link_libraries(vrp ${SCIP_LIBRARIES})if( TARGET examples )add_dependencies( examples vrp )
endif()add_subdirectory(check)
enable_testing()

报错的是第5行:find_package(SCIP REQUIRED), 而且总是说在这里(之前interactive shell安装路径里面,如下图)找到scip-config.cmake文件,但无法接受。

后来我build好optsuite后发现,它里面也有自己的scip-config.cmake,我就想改cmake寻找文件的默认路径,使其cmake时找的scip-config.cmake指向optsuite自己的,但是目前我还没成功改到。后来才发现这样改是不行的,因为之前安装过SCIP的distributed version且修改了系统变量Path,所以scip-config.cmake默认指向了interactive shell的目录, 删掉系统变量即可。

后来我也认真的查了一下cmake的CMakeList的编译过程,以及find_package(find_package分两种方式,详情请看https://zhuanlan.zhihu.com/p/97369704)的资料(更详尽的CMake介绍请看它的官网https://cmake.org/cmake/help/latest/index.html)。了解了cmake的寻路规则,才发现报错的第五行是在说要找一个<scip>-config.cmake的文件,而且自己猜 required表明cmake时需要给定这个参数。

此时在optsuite目录下使用cmd命令(如下)即可把上面的问题处理掉(然并卵)。

cmake . -D SCIP_DIR=..\..\build

2. GLPK的成功使用

这个就显得简单很多。按照https://blog.csdn.net/u014206910/article/details/53081544的教程,安装好GLPK后,进入VS2015,创建一个新项目,然后进行如下设置。

平台: debug, x64
项目-》属性-》C/C++-》常规-》附加包含目录-》添加glpk.h的路径,我这里是D:\glpk-4.60\src    (D:\glpk-4.60就是我解压后的路径)

连接器-》常规-》附加库目录-》添加glpk.lib的路径 这里是D:\glpk-4.60\w64
连接器-》输入-》附加依赖项-》添加glpk.lib

后面你就可以跟着glpk的document教程进行编程了。

线性规划整数规划求解器SCIP的失败使用 与 GLPK的成功使用相关推荐

  1. 优化求解器SCIP介绍

    SCIP(Solving Constraint Integer Programs)一款非常成熟的开源混合整数规划(MILP)框架,支持自定义搜索树中的各个模块,当然包括在分支限界(Branch and ...

  2. 一站式解决数学规划求解器SCIP的安装与使用

    安装Java的SCIP接口JSCIPOpt系列 https://blog.csdn.net/qq_40275637/article/details/109703216 安装python的SCIP接口P ...

  3. SCIP | 数学规划求解器SCIP超详细的使用教程

    前言 小伙伴们大家好呀!继上次lp_solve规划求解器的推文出来以后,大家都期待着更多求解器的具体介绍和用法.小编哪敢偷懒,这不,赶在考试周之际,又在忙里偷闲中给大家送上一篇SCIP规划求解的推文教 ...

  4. python调用开源求解器scip求解运输问题

    运输问题 运输问题(transportation problem)一般是研究把某种商品从若干产地运至若干个销地而使总运费最小的一类问题.一种特殊的线性规划问题,由于其技术系数矩阵具有特殊的结构,可以使 ...

  5. python调用求解器SCIP求解设施选址覆盖问题

    文章目录 1. 设施选址集合覆盖问题 2. 算法实现 2.1 测试数据集 OR-Library 2.2 python调用SCIP求解设施选址覆盖问题完整代码: 2.3 数据结果 参考文献 1. 设施选 ...

  6. python调用开源求解器SCIP求解带时间窗车辆路径问题(VRPTW)

    文章目录 1. 问题定义 2. 数学模型 3. python调用SCIP实现代码 4. 结果 参考文献 1. 问题定义 带时间窗车辆路径问题(vehicle routing problem with ...

  7. java 整数规划_线性规划与整数规划求解速度对比

    文章发表于微信公众号[数据魔术师]:线性规划&整数规划求解速度PK线性规划&整数规划求解速度PK​mp.weixin.qq.com 相信大家对线性规划和整数规划应该不陌生,在开始今天的 ...

  8. Python 调用 SCIP 求解器的选址模型代码示例

    本文介绍 Python 语言调用 SCIP 求解器,求解选址模型的代码示例. 安装 SCIP 和 PySCIPOpt 安装 SCIP 求解器的教程: SCIP | 数学规划求解器SCIP超详细的使用教 ...

  9. 线性规划求解器总结与比较

    文章目录 Gurobi CPLEX GLPK CBC 线性规划是一种优化问题,其目标是在一定的约束条件下,最大化或最小化一个线性目标函数.线性规划在生产计划.货物运输.网络流量管理等领域都有广泛应用. ...

最新文章

  1. 第一个dotnetcore程序,Hello World
  2. SpringMVC-开启静态资源访问权限
  3. Tomcat NIO
  4. html图片自动循环轮播图,js实现图片无缝循环轮播
  5. 蛇形填数 ------- 模拟水题
  6. POJ 2253 1797
  7. 宠物管理系统mysql_基于java+MySQL的宠物管理系统
  8. OJ1047: 对数表(C语言)
  9. OBS录制高清视频卡顿原因之一:OBS缓存数据写入磁盘不及时
  10. 二阶无源低通滤波器幅频特性曲线_低通无源滤波器设计-详细
  11. Linux基础操作篇
  12. 红色小吃加盟网站源码 织梦dede模板[带手机版数据同步]
  13. python数据采集6-读取文档
  14. Rabbitmq安装过程(使用docker)
  15. 扁平风轮播图大屏展示html页面源码
  16. php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例
  17. 基于SpringBoot开发的企业OA自动化办公系统
  18. 这些朋友更适合苹果电脑,你了解吗?
  19. 1135 mysql_mysql中一个普通ERROR 1135 (HY000)错误引发的血案
  20. VSCode安装TinyPNG,并配置api key

热门文章

  1. cordic算法反正切c语言,Cordic 算法之 反正切
  2. 江苏计算机信息录入技师选拔考试题,江苏省机关事业单位人技师资格选拔考试试卷.doc...
  3. ChatGPT 使用 拓展资料:大模型训练为什么这么难
  4. Mysql数据库备份和恢复总结
  5. C++之char数组字符串
  6. Python爬虫:基于Scrapy的爬取失踪人口数据小爬虫
  7. Java使用FFmpeg实现mp4转m3u8
  8. #考试酷#A5_Arithmetic Operators
  9. 更换jenkins插件下载源
  10. VBS编程打造自己的病毒专杀工具