割平面法求解整数规划问题实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运筹学与最优化MATLAB 编程

实验报告

割平面法求解整数规划问题

一、 引言:

通过对MATLAB 实践设计的学习,学会使用MATLAB 解决现实生活中的问题。该设计是在MATLAB 程序设计语言的基础上,对实际问题建立数学模型并设计程序,使用割平面法解决一个整数规划问题。经实验,该算法可成功运行并求解出最优整数解。 二、 算法说明:

割平面法有许多种类型,本次设计的原理是依据Gomory 的割平面法。Gomory 割平面法首先求解非整数约束的线性规划,再选择一个不是整数的基变量,定义新的约束,增加到原来的约束中,新的约束缩小了可行域,但是保留了原问题的全部整数可行解。

算法具体设计步骤如下:

1、首先,求解原整数规划对应的线性规划

,*)(min x c x f =⎩⎨⎧≥≤0

..x b

Ax t s ,设最优解为x*。

2、如果最优解的分量均为整数,则x*为原整数规划的最优解;否则任选一个x*中不为整数的分量,设其对应的基变量为x p ,定义包含

这个基变量的切割约束方程con j

j ij p b x r x =+∑,其中x p 为非基变量。

3、令][ij ij ij r r r -=,][con con con b b b -=,其中[]为高斯函数符号,表示不大于某数的最大整数。将切割约束方程变换为

∑∑-=-+j

j

ij con con j

j ij p x r b b x r x ][][,由于0

1<-∑j

j ij con x r b ,因为自变量为整数,则∑-j

j ij con x r b 也为整数,所以进一

步有0≤-∑j

j ij con x r b 。

4、将切割方程加入约束方程中,用对偶单纯形法求解线性规划

⎪⎪

⎪⎨⎧≥≤-≤=∑00..,*)(min x x r b b Ax t s x c x f j j ij con ,然后在转入步骤2进行求解,直到

求出最优整数解停止迭代。 三、 程序实现:

程序设计流程图如图1,具体设计代码(见附录)。

图1

四、 算例分析:

已知AM 工厂是一个拥有四个车间的玩具生产厂商,该厂商今年新设计出A 、B 、C

、D 、E 、F 六种玩具模型,根据以前的生产情况及市场调查预测,得知生产每单位产品所需的工时、每个车间在一季度的工时上限以及产品的预测价格,如下表所示。问:每种设计产品在这个季度各应生产多少,才能使AM 工厂这个季度的生产总值达到最大?

1、问题分析并建立模型:

由题意可知这是一个求解产量使产值最大的整数规划问题。根据上述问题和已知数据,可以假设每种产品在这个季度各应生产产量分别为:x 1、x 2、x 3、x 4、x 5、x 6,则有以下线性方程组

maxZ=20x 1+14x 2+16x 3+36x 4+32x 5+30x 6

⎪⎪⎪⎩⎪

⎪⎪⎨⎧=≥≤+≤+≤+≤+++++6

,,1i ,0900

08.003.0100

05.002.0700

05.002.085003.003.003.001.001.001.0..6

35241654321 且为整数,i x x x x x x x x x x x x x t s 2、实验步骤:

首先引入松弛变量x 7、x 8、x 9 、x 10,使其化为标准型 minZ=-20x 1-14x 2-16x 3-36x 4-32x 5-30x 6

⎪⎪⎪⎩⎪

⎪⎪⎨⎧=≥=++=++=++=++++++10

,,1i ,0900

08.003.010005.002.0700

05.002.085003.003.003.001.001.001.0..10

639528417654321 且为整数,i x x x x x x x x x x x x x x x x x t s

其次从标准型可表示出约束系数矩阵、右端项常数矩阵、目标系数矩阵分别为A 、b 、c 。 然后调用DividePlane 函数,使用割平面法进行求解。

在MATLAB的命令窗口输入一下命令:

>> A=[0.01 0.01 0.01 0.03 0.03 0.03 1 0 0 0;0.02 0 0 0.05

0 0 0 1 0 0;0 0.02 0 0 0.05 0 0 0 1 0;0 0 0.03 0 0 0.08 0 0 0

1];

>> c=[-20;-14;-16;-36;-32;-30];

>> b=[850;700;100;900];

>> [intx,intf]=DividePlane(A,c,b,[7 8 9 10])

3、实验结果及分析:

intx =

35000 5000 30000 0 0 0

intf =

-1250000

实验结果求出的目标函数值是化为标准型的最小值,则转化为原问题的目标函数值应取相反数,所以从实验结果可知:生产各种产品的产量分别应为为,生产A 35000、生产B 5000、生产C 30000、生产D 、E、F均为0,此时的季度产值为最大即1250000元。该结果是可信的,故通过该实例说明该程序能够运用于实际,用来解决实际生活中求解整数规划的问题。

五、结束语:

Matlab是个很强大的软件,提供了大量的函数来处理各种数学、工程、运筹等的问题,并且含有处理二维、三维图形的功能,使用matlab能够解决许多实际生活中的问题。通过这个学期的学习,仅是

相关文档
最新文档