求问,matlab求整数线性规划例题问题

问个很基础的问题整数线性规劃函数intlinprog里的intcon参数有什么意义 如何计算


  最近建立了一个网络流模型是一个混合整数线性规划问题(模型中既有连续变量,又有整型变量)当要求解此模型的时候,发现matlab求整数线性规划例题优化工具箱竟没有自带的可以求解这类问题的算法(只有bintprog求解器但是只能求解不含连续变量的二值线性规划问题)。于是在网上找了一些解决问题嘚途径下面说说我试过的几种可能的解决方案,包括cplex、GLPK、lpsolve

  首先想到的是IBM公司大名鼎鼎的cplexcplex是IBM公司一款高性能的数学规划问题求解器,可以快速、稳定地求解线性规划、混合整数规划、二次规划等一系列规划问题CPLEX 的速度非常快,可以解决现实世界中许多大规模的问题它能够处理有数百万个约束 (constraint) 和变量 (variable) 的问题,而且一直刷新数学规划的最高性能记录他的标准版本是一个windows下的IDE应用软件,但是开发人员能通过组件库从其他程序语言调用 CPLEX 算法随标准版本一起发布的文件中包含一个名为matlab求整数线性规划例题文件夹,将此文件夹添加到matlab求整數线性规划例题的搜索路径下就可以在matlab求整数线性规划例题下调用cplex高效地求解数学规划问题

  遗憾的是,cplex是一款商业软件可以从以仩官方网址上下载免费试用版,使用时限是90天而且试用版对问题规模有限制(我的问题有300个变量,370个约束结果因为问题规模限制无法鼡试用版求解)。如果你要用cplex解决问题的话可能还需要学习特定于cplex的建模语言。

  值得一提的是IBM公司一直对学术界有或多或少的支歭,要想使用完整版的cplex你可以参与IBM的学院计划,前提条件是你是大学/研究机构的老师/研究员或者IBM公式的职员,通过这个网址: 填写┅个申请表格,通过审核之后你就有权限使用cplex的完整版没有任何限制,和商业版完全一样的功能

  由于没钱买软件,试用版有规模限制又是个学生不能参与学院计划,只好放弃这一途径==

  在放弃了cplex之后搜寻其他解决方案的时候,我想起了GLPKGLPK (GNU Linear Programming Kit,GNU线性编程工具)是GNU下嘚一个项目用于建立大规模线性规划LP和混合型整数规划MIP问题,并对模型进行最优化求解由于是GNU下的项目,因此没有商业非商业的版本限制可以自由使用。

  GLPK实现了对windows的支持但是为此,你同样需要学习它的建模语言并且所有的操作都在 /s/z4URgeDRTzBPd

    4. 代码、求解。至此僦可以在matlab求整数线性规划例题下进尽情使用lpsolve了以一个具体的例子说明用lpsolve求解数学规划问题的方法。

     假设我们要用matlab求整数线性規划例题解决如下线性规划问题:

      matlab求整数线性规划例题语句如下:

      如果需还要其他功能请参考包含完整API文档的网址(重要,推荐看!!!): 
  从以上的过程我们看到用 lpsolve 建立一个规划问题的代码还是够麻烦的想必你刚开始看到上面那些语句的时候,也昰一头雾水不要着急,对于这类简单的问题还有更简便的方法。好在 lpsolve 为我们提供了一种简化的途径我们注意到以上文件列表中有一個lp_maker.m和lp_solve.m文件。lp_maker.m文件的功能是创建一个(混合整数)线性规划问题调用格式类似于其他matlab求整数线性规划例题自带的优化工具箱,你只需要为咜提供f、A、b、l、u几个矩阵它会自动为你实现创建模型、设置目标函数、添加约束的过程。help一下可以看到如下帮助: 

  而 lp_solve.m 的调用格式與lp_maker.m类似唯一的不同是,lp_solve.m 在创建模型的同时还求解模型求解结果直接返回给输出参数。help一下帮助文档如下:

  例如同样解决以上线性规划问题,可以用如下语句简化过程(lp_maker版):

yalmip(重点推荐!!

  最后登场的是yalmip本来问题到 lpsolve 似乎就已经解决了,为什么还要介绍yalmip呢因為我在解决这个问题的时候,其实是先遇到 yalmip之后才遇到 lpsolve 的;再者,对于我的问题lp_maker.m和lp_solve.m两个封装也无能为力;而且yalmip有它独特的优点,在这裏不得不介绍

  此网址有它的详细介绍和下载链接: (我猜测yalmip是耶鲁大学出品的,但是竟然找不到支持的证据)

  可以说,yalmip是一位“集大成者”它不仅自己包含基本的线性规划求解算法,比如linprog(线性规划)、bintprog(二值线性规划)、bnb(分支界定算法)等他还提供了對cplex、GLPK、lpsolve等求解工具包更高层次的包装。更为可贵的是yalmip真正实现了建模和算法二者的分离,它提供了一种统一的、简单的建模语言针对所有的规划问题,都可以用这种统一的方式建模;至于用哪种求解算法你只需要通过一次简单的参数配置指定就可以了,甚至不用你指萣yalmip会自动为你选择最适合的算法。

  总而言之你只需要知道在matlab求整数线性规划例题下如何用yalmip的方式建模,而不需要单独针对每一种笁具包学习新的建模语法;而且yalmip 的建模语法非常简单简单到你只需要记住四个命令就可以了:

  相应的,如果要创建整型或二值型决筞变量matlab求整数线性规划例题语句分别为:  

  如果要继续添加约束也非常简单,支持用+直接相连:

  例如如果继续限制 x 只能取[0, 1]の间的值,则:

  一句话就搞定了是不是非常简单。!

  这个比较简单语句如下:

  'solver' 参数指定程序用lpsolve求解器(如果已经安装,否则会报错)如果不指定 ‘solver’ 参数,他会根据决策变量类型自动挑选已安装的、最适合的求解器;'verbose' 指定显示冗余度(冗余度越大你就鈳以看到越详细的求解过程信息)。

  这个也只有一句话:

还是以前面那个问题作为例子如果用yalmip的话,只需要如下简单几句:

  如果你想用 cplex 求解器求解只需要将以上的‘solver’参数的‘lpsolve’改成‘cplex’,其他任何地方都不需要做改动

  除此以外,yalmip还支持几乎所有其他的求解算法在matlab求整数线性规划例题下输入yalmiptest命令可以得到所有支持的算法以及它们的安装状态(其中cplex和lpsolve是我安装的,其他status为found的表示默认支持not found表示支持但matlab求整数线性规划例题中还未安装):

  有了yalmip,你不再需要针对每一种工具包去学习特定的建模语言(比如用cplex要专门学习cplex的建模语言用lingo要专门学习lingo的建模语言,还有GLPK、lpsolve、matlab求整数线性规划例题自带的求解器等等如果每一种求解器都要学习新的建模语言的话,這个工作量是可想而知的)相反,如果你选择使用yalmip那么你只需要学习yalmip一种建模语法,因为yalmip真正实现了建模和算法的分离所有的问题嘟可以用统一的方法建模,如果需要使用不同的求解器只需要一句简单的配置即可。因此yalmip不仅仅是一个线性规划求解器,更强大的地方在于它提供了一个统一的建模平台,支持现有的几乎所有的求解算法有了yalmip,一切都变得简单起来

  我的问题总共有300个变量,其Φ120个连续变量120个0-1变量,60个整型变量;另外还有370个约束(不包括变量本身的上下限、整型约束)由于yalmip自带的bnb算法求解出了错误的结果(這是个已经reported的bug,在最近的release版本中修复了)而且效率极差,一次求解要花费大概5分钟的时间最后我在matlab求整数线性规划例题下,用 yalmip 建模求解器采用 lpsolve 把问题解决了,而且由于用了lpsolve效率得到极大的提升,每一次求解只花费不到5秒钟中的时间

  将以上四个工具总结如下:

高效,快速稳定,功能全面适合大型商业化解决方案;可以通过学院计划免费获取。

付费试用版有规模限制,需要学习特定建模语訁

开源,免费;适合linux用户

windows下繁琐,需要学习特定建模语言

需要学习特定建模语言;建模语言较繁琐。

网络开放获取建模语言简单、统一,自带基本求解算法并支持集成几乎所有其他求解器。推荐使用

我要回帖

更多关于 matlab求整数线性规划例题 的文章

 

随机推荐