使用MATLAB调用lpsolve求解器来编写列生成算法(以卷纸切割问题为例)

本文通过MATLAB调用lpsolve求解器,演示如何应用列生成算法解决卷纸切割问题。首先建立线性规划模型,然后逐步引入新变量,通过子问题迭代寻找最优解。详细步骤包括编写RMP和子问题程序,并展示最终代码及运行结果。
摘要由CSDN通过智能技术生成

书接上文(MATLAB调用lpsolve的详细介绍帖),我们继续探讨MATLAB调用lpsolve的用法。
列生成算法(column generation method)是一种求解大规模线性规划问题的有效方法。它运用分解方法的基本思想以及线性规划单纯形法的特点把问题变成若干个适应计算机能力的子问题,逐个计算,最后得到原问题的最优解。

这里还是采用大家学习列生成算法常用的例子来讲述:如何用MATLAB调用lpsolve来编写列生成算法,求解卷纸切割问题。

例子:有16米长的卷纸若干卷,现分别需要3m,6m,7m的卷纸25,20,18卷,请问如何对16米长的卷纸进行切割以实现最小化16m长卷纸的消耗。
根据上面的问题描述我们可以建立下列线性规划模型:
模型1:
min z=y1+y2+…+yn
s.t.
a11y1+a12y2+…+a1nyn>=25
a21y1+a22y2+…+a2nyn>=20
a31y1+a32y2+…+a3nyn>=18

关于列生成算法的原理,帖子(原贴链接)已经讲述的很清楚,本文不再赘述。但是细心的童鞋已经发现,在lpsolve上手动输入模型来求解非常繁琐,要是能编写程序自动求解就好了。
这样就引出来本文的重点阐述的内容了,本文要做的就是采用MATLAB调用lpsolve,对上述问题进行求解。
这里还需要一个基础知识,那就是如何用MATLAB调用lpsolve,小编的上一篇帖子(MATLAB调用lpsolve的详细介绍帖)有详细讲解,不懂的童鞋可以回去看看。

在编写列生成算法程序的时候,我们可以采用从特殊到普遍的思路进行编写,下面是具体编写思路:
step1.我们可以将模型1表示的问题限制成如下问题,用RMP1表示,显然RMP1有3种方案,方案1:切割成5卷3m卷纸;方案2:切割成2卷6m卷纸;方案3:切割成2卷7m卷纸;。
RMP1:
min y1+y2+y3
s.t.
5y1+0y2+0y3>=25
0y1+2y2+0y3>=25
0y1+0y2+2y3>=25
我们针对RMP1编写如下程序:

f=[1,1,1];
A=[5,0,0;0,2,0;0,0,2];
b=[25,20,18];
vlb=[0,0,0];
e=[1,1,1];
RMP1=lp_maker(f,A,b,e,vlb,[],[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值