当前位置:首页 > clpex,GLPK,lpsolve,yalmip简介与教程
最近建立了一个网络流模型,是一个混合整数线性规划问题(模型中既有连续变量,又有整型变量)。当要求解此模型的时候,发现matlab优化工具箱竟没有自带的可以求解这类问题的算法(只有bintprog求解器,但是只能求解不含连续变量的二值线性规划问题)。于是在网上找了一些解决问题的途径,下面说说几种可能的解决方案。
cplex
首先想到的是IBM公司大名鼎鼎的cplex。cplex是IBM公司一款高性能的数学规划问题求解器,可以快速、稳定地求解线性规划、混合整数规划、二次规划等一系列规划问题。CPLEX 的速度非常快,可以解决现实世界中许多大规模的问题,它能够处理有数百万个约束 (constraint) 和变量 (variable) 的问题,而且一直刷新数学规划的最高性能记录。他的标准版本是一个windows下的IDE应用软件,但是开发人员能通过组件库从其他程序语言调用 CPLEX 算法。随标准版本一起发布的文件中包含一个名为matlab文件夹,将此文件夹添加到matlab的搜索路径下就可以在matlab下调用cplex高效地求解数学规划问题。 cplex IDE主界面(是不是很熟悉的界面?没错,cplex也是基于eclipse插件机制开发的。):
CPLEX Optimizer中文介绍:http://www.sstc.org.cn/components/detailview.aspx?id=ce16c50e-0059-417b-9806-c8b1d3224084 官方网址:http://www.sstc.org.cn/components/detailview.aspx?id=ce16c50e-0059-417b-9806-c8b1d3224084 遗憾的是,cplex是一款商业软件,可以从以上官方网址上下载免费试用版,使用时限是90天,而且试用版对问题规模有限制(我的问题有300个变量,370个约束,结果因为问题规模限制无法用试用版求解)。如果你要用cplex解决问题的话,可能还需要学习特定于cplex的建模语言。
值得一提的是,IBM公司一直对学术界有或多或少的支持,要想使用完整版的cplex,你可以参与IBM的学院计划,前提条件是你是大学/研究机构的老师/
研究员,或者IBM公式的职员,通过这个网址:http://www-03.ibm.com/ibm/university/academic/pub/page/ban_ilog_programming? ,填写一个申请表格,通过审核之后你就有权限使用cplex的完整版,没有任何限制,和商业版完全一样的功能。
GLPK
在放弃了cplex之后搜寻其他解决方案的时候,我想起了GLPK。GLPK (GNU Linear Programming Kit:GNU线性编程工具)是GUN下的一个项目,用于建立大规模线性规划LP和混合型整数规划MIP问题,并对模型进行最优化求解。由于是GNU下的项目,因此没有商业非商业的版本限制,可以自由使用。 GLPK实现了对windows的支持,但是为此,你同样需要学习它的建模语言,并且所有的操作都在glpsol.exe提共的命令行下完成,比较不方便,且耗时长。如果要在matlab下使用,还需要下载额外的驱动文件。 GLPK英文介绍:http://www.gnu.org/software/glpk/ GLPK for windows:http://winglpk.sourceforge.net/ lpsolve
在弄了一阵GLPK无果之后,我又转投lpsolve了。lpsolve是sourceforge下的一个开源项目,它的介绍如下:
Mixed Integer Linear Programming (MILP) solver lp_solve solves pure linear, (mixed) integer/binary, semi-cont and special ordered sets (SOS) models.lp_solve is written in ANSI C and can be compiled on many different platforms like Linux and WINDOWS
它是一个混合整数线性规划求解器,可以求解纯线性、(混合)整数/二值、半连续和特殊有序集模型。并且经过实际验证,有极高的求解效率。
sourceforge主页:http://sourceforge.net/projects/lpsolve/?source=directory 从以上主页上可以下载lpsolve的IDE版本,界面比较简陋,类似于如下的样子:
如果要在matlab下使用lpsolve,需要在网址http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/ 提供的文件列表中下载类似于lp_solve_5.5.2.0_MATLAB_exe_win32的zip文件。
由于我的问题就是用的lpsolve解决的,我想在这里详细介绍一下,以lp_solve_5.5.2.0_MATLAB_exe_win32为例,过程如下: 1. 下载。将下载的zip解压后,得到以下文件结构:
共分享92篇相关文档