线性规划之单纯形法实验指导Word下载.docx
《线性规划之单纯形法实验指导Word下载.docx》由会员分享,可在线阅读,更多相关《线性规划之单纯形法实验指导Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
全部可行解的集合称为可行域.使线性规划的目标函数达到最优值(依具体问题,或是极大值,或是极小值)的可行解称为线性规划问题的最优解。
在这一问题中,最优解对应于直线族x1+x2=c中,与可行域相切的一条直线。
切点正好是最优解(6/5,6/5),因为这个点在可行域的边界上正好是两直线的交点,即方程组
的解
x1=6/5
x2=6/5
用图解法求解线性规划问题时应注意几点
1.图解法适用于两个变量的线性规划问题;
2.线性规划问题的解有四种情况:
有唯一最优解、有无穷多最优解、有无界解、无可行解;
3.线性规划问题如果有最优解,则可行域的某个顶点必定是最优解.为求最优解,可先计算可行域上某顶点的目标函数值,再考察相邻顶点处的目标函数值是否比它更优,如果为否,则这个点就是最优点;
如果其它点更优,则转到其它顶点上去重复这一过程。
对于例1中目标函数最大值问题,为了用MATLAB命令直接求解,应转化为最小值问题,即
minz=—x1—x2
x1≥0,x2≥0
取向量
cT=(—1—1)
bT=(66)
e0=(00)
矩阵
用MATLAB求解线性规划问题命令LP的下面格式
lp(c,A,b,e0,e1)
求解该问题。
输入问题中的全部数据,并调用LP命令。
程序段如下
c=[-1-1];
A=[23;
32];
b=[6;
6];
e0=[00];
x=lp(c,A,b,e0)
计算机运行后的数据结果为
ans=6/5
6/5
所以,最优解为
x1=6/5
x2=6/5
这一结论与图解法的结果是一致的。
在MATLAB中,常用的求解线性规划问题的命令使用格式有以下几种
(1).最简单的调用格式:
X=lp(c,A,b)
(2).使用控制变量的上、下界调用格式:
X=lp(f,A,b,vlb,vub)
(3).使用控制变量的初始点进行迭代格式:
X=lp(f,A,b,vlb,vub,X0)
(4).由A和b定义的约束条件中前N个为等式约束条件使用格式:
X=lp(f,A,b,vlb,vub,X0,N)
(二)生产计划问题
现在考虑一个生产计划问题。
例2某工厂生产甲、乙两种同类产品,需要用到三种原料。
两类产品中每单位的产品对三种原料的不同的需求量数据如下表所示
表1
原料
甲
乙
原料可供应量
第一种原料(kg)
1
3500
第二种原料(kg)
0
1500
第三种原料(kg)
5
2
10000
单位产品利润(元)
3
问如何安排生产使总利润最大?
设生产甲、乙各x1,x2(kg),则有如下数学模型
maxz=5x1+3x2
s.t.
由于原问题不是MATLAB所规定的标准形式,将原问题转化为等价的线性规划问题
minz=—5x1—3x2
s.t.
用MATLAB求解线性规划命令求解时所需的数据结构有
,
用MATLAB求解程序段如下
c=[53];
A=[11;
10;
52];
b=[3500150010000];
lp(-c,A,b,e0)
计算结果为
ans=1000
2500
所以,这一问题的最优决策是取变量
x1=1000
x2=2500
在不退出MATLAB环境条件下,继续使用命令c*ans,可得
ans=12500
这说明在制定生产计划时安排甲类产品生产1000kg,乙类产品生产2500kg,可以在原料供应量的限制下获得最大的生产利润12500元。
制定生产计划表如下
表2
共计
计划生产(kg)
1000
产品利润(元)
5000
7500
12500
现在用人工计算的图解法验证上面结论。
为了画出约束条件
对应的三条直线图形,需知道直线上的两个点的坐标数据。
第一条直线在坐标轴上截距分别为3500,3500。
所以第一条直线过点(3500,0),(0,3500),它们的横坐标和纵坐标分别为[3500,0],[0,3500]。
第二条直线过点(1500,0)与X1轴相垂直,所以它过点(1500,0),(1500,5000),它们的横坐标和纵坐标分别为[1500,1500],[0,5000]。
第三条直线截距分别为10000/5和10000/2,所以它过点(2000,0),(0,5000),它们的横坐标和纵坐标分别为[2000,0],[0,5000]。
输入下面绘直线命令
line([3500,0],[0,3500])
line([1500,1500],[0,5000])
line([2000,0],[0,5000])
可得图形
图2
由图2可知,需要分别求出第一条直线与第三条直线交点,第二条直线与第三条直线交点。
用求解线性方程组的左除命令
[11;
52]\[3500;
10000]
[10;
52]\[1500;
10000]
可得交点P13(1000,2500),P23(1500,1250),由此得可行域对应的多边形角点坐标如下
P0(0,0)
P1(0,3500)
P13(1000,2500)
P23(1500,1250)
P3(1500,0)
用填充命令
fill([0,0,1000,1500,1500],[0,3500,2500,1250,0],'
r'
),
得可行域图形。
图3
将P13的坐标代入目标函数得
zmax=5×
1000+3×
2500=12500
为了在可行域图上画出直线
5x1+3x2=12500
的图形。
首先计算出该直线在坐标轴上的截距分别为:
12500/5和12500/3。
使用两点绘直线命令
line([12500/5,0],[0,12500/3])
得直线的图形如图3所示,直线与可行域多边形相切。
切点正好是可行域的一个角点,该角点的坐标P13(1000,2500)就是原问题的最优解。
一般的生产计划问题可作如下描述:
有m种资源:
A1,……,Am,拟生产n种产品:
B1,……,Bn。
生产第j种产品一个单位需用第i种资源数量为aij,第i种资源的最大数量为bi,销售一个单位的第j种产品可得产值cj。
现需要制定生产计划,确定各种产品生产多少,使利用有限资源,获取最大的收获。
可将有关数据列表如下
表3
产品类
资源类
B1
……
Bn
A1
a11
a1n
b1
.……
Am
am1
amn
bm
产值
c1
cn
设生产第j种产品的数量为xj(j=1,2,……,n)。
则向量X=(x1x2……,xn)T的一组确定的值代表一个生产计划。
每个产品最低产量计划为:
xj≥ej。
拟定生产计划使总产值最高。
目标函数为
或z=cTx
约束条件为
数学模型为
maxz=cTx
例7.2某工厂制造A、B两种产品,制造A每吨用煤9吨,电4千瓦,3个工作日;
制造B每吨用煤5吨,电5千瓦,10个工作日。
制造A和B每吨分别获利7000元和12000元,该厂有煤360吨,电力2000千瓦,工作日3000个可利用。
问A、B各生产多少吨获利最大。
首先将数据列表如下
表4
A
B
上限
煤(吨)
9
360
电(千瓦)
4
2000
工作日(天)
10
3000
利润(千元):
7
12
设计划生产A、B两种产品的数量分别为x1,x2(吨),获得的总利润为z。
则目标函数为
Z=7x1+12x2
约束条件为各种资源的上限
9x1+5x2≤360
4x1+5x2≤200
3x1+10x2≤300
令
,
建立数学模型如下
maxz=cTx
现在用MATLAB求解线性规划命令LP求解这一问题,注意将极大值问题转化为极小值问题,以便符合规定的标准形式。
输入数据和求解命令如下
c=[712]
A=[95;
45;
310]
b=[360;
200;
300]
e0=[00]
lp(-c,A,b,e0)
最后得计算结果
ans=20
24
这说明取决策变量
x1=20
x2=24
即计划A产品生产20吨,B产品生产24吨是最优决策。
(三)运输问题
运输问题从数学模型上可以分为三类:
产销平衡运输问题、产大于销运输问题、销大于产运输问题。
本节只介绍产销平衡的这一类。
例3从甲城调出蔬菜2000吨,从乙城调出蔬菜1100吨,分别供应A地1700吨,B地1100吨,C地200吨,D地100吨,每吨运费(元)如下
表5
A地
B地
C地
D地
甲城
21
25
15
乙城
51
37
为了确定运费最省的调拨计划,用x11,x12,x13,x14分别表示从甲城调往A,B,C,D四地的蔬菜量;
用x21,x22,x23,x24分别表示从乙城调往A,B,C,D四地的蔬菜量。
目标函数(即总运费)可以表示为
f=21x11+25x12+7x13+15x14+51x21+51x22+37x23+15x24
因为甲城和乙城共调出蔬菜3100吨,而A地、B地、C地、D地一共需要蔬菜也是3100吨,所以这是产销平等的运输问题。
由产地甲城和乙城调出的蔬菜量得约束条件为
x11+x12+x13+x14=2000
x21+x22+x23+x24=1100
由A地、B地、C地和D地需要的蔬菜量得另一组约束条件
x11+x21=1700
x12+x22=1100
x13+x23=200
x14+x24=100
显然运输量应满足非负性约束条件
xij≥0,i=1,2;
j=1,2,3,4
实际问题需要求目标函数f的极小值,由此得数学模型
minf=21x11+25x12+7x13+15x14+51x21+51x22+37x23+15x24
xij≥0,i=1,2;
j=1,2,3,4
现在考虑用MATLAB命令求解这一数学模型。
由于决策变量是二维数组,MATLAB的标准形式规定线性规划问题的决策变量为一维数组(向量)。
做变量代换,令
y1=x11,y2=x12,y3=x13,y4=x14
y5=x21,y6=x21,y7=x21,y8=x21
所以,目标函数转换为
f=21y1+25y2+7y3+15y4+51y5+51y6+37y7+15y8
约束条件转换为
y1+y2+y3+y4=2000
y5+y6+y7+y8=1100
y1+y5=1700
y2+y6=1100
y3+y7=200
y4+y8=100
由此得向量
y=[y1y2y3y4y5y6y7y8]T
c=[212571551513715]T
b=[2000110017001100200100]T
e0=[00000000]
以及矩阵
写出线性规划问题如下
minF=cTy
s.t.Ay=b
y≥0
在约束条件中,只有等式约束条件和非负约束条件。
这不由于一般的MATLAB规定的标准形式,用LP命令求解时,必须注明由A和b定义的约束条件中前六个为等式约束条件。
根据LP命令使用格式,需要用更多参数。
所以,在使用命令时不仅要给出控制变量的下界,还需要给出控制变量的上界。
因为产地的蔬菜供应量最大值为2000吨,故取向量e1=[200020002000200020002000]
为控制变量的上界。
并取控制变量的初始值为
v0=[00000000]
在MATLAB中输入数据和命令如下
c=[212571551513715];
b=[2000;
1100;
1700;
100];
e0=[00000000];
e1=[200020002000200020002000];
A=[11110000;
00001111;
10001000;
…
1000100;
00100010;
00010001]
y=lp(c,A,b,e0,e1,v0,6)
y=
1700
100
200
-1/180143985094821
1/197902556028729
这说明第四、五、七个控制变量应取值为0,即一组最优解为
y1=1700y2=100y3=200y4=0
y5=0y6=1000y7=0y8=100
为了求出最优解的目标函数
F=cTy
的值,不退出MATLAB环境,键入命令
c*y
得数据
ans=92100
由此可得最优解的目标函数值为92100(元),最优解为
X11=1700X12=100X13=200X14=0
X21=0X22=1000X23=0X24=100
构造调度表如下
表6蔬菜运输调度计划(单位:
吨)
六、实验任务
1.某糕点厂用面粉加佐料,通过电烤生产A、B两种饼干。
已知生产A、B两种类型的饼干各1吨所需面粉、用电量和所得利润如下表
面粉(吨)
电(度)
利润(千元)
0.72
80
2.1
0.96
60
2.2
现在每天只能供应面粉3.6吨,电260度,问如何生产才能获利润最大?
3.某中药厂用当归作原料,制成当归丸和当归膏投入市场,生产一盒当归丸和一瓶当归膏所需劳动力(单位:
小时)和原料(单位:
千克)以及工厂现有劳动力、原料数量如下表:
当归丸
当归膏
现有资源
劳动力(小时)
4000
原料(千克)
利润(元)
问中药厂应如何安排生产,才能获利润最多?
4.某种物品先存放在两个仓库A1和A2中,再运往三个使用地B1,B2,B3,其间的距离(或单位运价),各仓库的存量和使用地的需用量如下
B2
B3
产量
A2
销量
6
建立使总运输量最小的运输问题的数学模型。
5.某部门有3个生产同类产品的工厂A1、A2、A3,生产的产品由4个销售点B1、B2、B3、B4出售,各工厂的生产量、各销售点的销售量(单位均为吨)以及各工厂到各销售点的单位运价(元/吨)的所有数据列表如下
B4
11
16
A3
8
22
14
48
问如何调运才能使总运费最小?
6.编写一个MATLAB函数,函数的功能是利用LP命令求解运输问题。
要求输入运输费用数据(二维数组),产地约束条件数据(一维数组)和销地约束条件数据(一维数组),最后输出运输调度表(二维数组),以及对应的总运输费用。
7.食谱问题:
一饲养场饲养供实验用的动物,已知动物生长对饲料中的三种营养成分,蛋白质、矿物质和维生素特别敏感,每个动物每天至少需要蛋白质70克,矿物质3克,维生素10毫克,该场能搞到五种饲料,每种饲料10千克的成本如下:
饲料:
A4
A5
成本(元):
每一千克饲料中所含的营养成分如下表:
饲料
蛋白质(克)
矿物质(克)
维生素(毫克)
0.3
0.10
0.05
2.0
1.00
0.02
0.60
0.20
1.8
确定既能满足动物需要,又使总成本为最低的饲料配方。