MATLAB的线性规划问题的敏感性分析.doc
《MATLAB的线性规划问题的敏感性分析.doc》由会员分享,可在线阅读,更多相关《MATLAB的线性规划问题的敏感性分析.doc(8页珍藏版)》请在冰豆网上搜索。
MATLAB的线性规划问题的敏感性分析
一.问题的提出
在现在的日常生活中,我们常会遇到这样的问题,在不同的约束条件下找出最优点值或算出最佳的数值,以提高总产量或经济效益。
那么我们就需要假设一个模型出来,作为基本模型求解。
并找出其内在的规律以方便我们的生产生活的需要。
若约束条件改变,那么总产值是否也会有很大变化呢?
让我们一起来研究。
二.具体案例如下:
以某农场A,B,C等级耕地的面积分别为100,300,和200,计划种植水稻,大豆和玉米,要求三种农作物最低收获量分别为190000,130000和350000。
农场A,B,C耕地种植农作物产量如下表所示。
若三种农作物售价分别为水稻1.20元/,大豆1.5元/,玉米0.8元/,。
那么,
(1)如何制定种植计划才能使总产量最大?
(2)如何制定种植计划才能使总产值最大?
表一:
不同等级种植不同农作物的单产量(单位:
)
A等级耕地
B等级耕地
B等级耕地
水稻
11000
9500
9000
大豆
8000
6800
6000
玉米
14000
12000
10000
三.问题假设
根据题意,可以建立线性规划模型,假设决策变量为,表示不同的农作物在第等级耕地上种植的面积。
表2作物计划种植面积(单位:
)
A等级耕地
B等级耕地
B等级耕地
水稻
大豆
玉米
四.模型建立与分析
1.模型:
minz=cX
S.t.AX
命令:
x=linprog(c,A,b)
2.模型:
minz=cX
S.t.AX
Aeq.X=beq
命令:
x=linprog(c,A,b,Aeq,beq)
注意:
若没有不等式:
AX存在,则令A=[],b=[].
3.[x,fval]=linprog(.....)左端fval返回解X处的目标函数值。
4.思路分析:
找出约束条件——列出目标函数——作出可行域——求出最优解——敏感性分析——回答实际问题。
5.约束方程如下:
耕地面积的约束:
最低收获量的约束:
并且注意:
则
(1)追求总产量最大时,目标函数为:
(2)追求总产值最大的目标函数为:
可化简为
五.模型建立与求解:
1.对
(1)求解,追求总产量最大时,MATLAB程序如下:
f=[-11000-9500-9000-8000-6800-6000-14000-12000-10000];
A=[100100100;010010010;001001001;-1100000-950000-900000;0-800000-680000-60000;00-1400000-1200000-10000];
b=[100300200-190000-130000-350000];
lb=[000000000];
[xoptfxopt]=linprog(f,A,b,[],[],lb,[])
Optimizationterminatedsuccessfully.
xopt=
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
100.0000
300.0000
200.0000
fxopt=-7000000
键入S=-Z
得到原问题的目标函数最大值为S=7000000
2.运行后敏感性分析后的MATLAB程序如下:
从a=0开始,以步长对下列模型求解;
a=0;
while(1.1-a)>1
c=[-11000-9500-9000-8000-6800-6000-14000-12000-10000];
A=[100100100;010010010;001001001;-1100000-950000-900000;0-800000-680000-60000;00-1400000-1200000-10000];
b=[100+a;300+a;200+a;-190000+a;-130000+a;-350000+a];
Aeq=[];beq=[];
vlb=[0,0,0,0,0,0,0,0,0];vub=[];
[x,val]=linprog(c,A,b,Aeq,beq,vlb,vub);
a
x=x'
Q=-val
plot(a,Q,'.'),holdon
a=a+0.01;
end
xlabel('a'),ylabel('Q')
grid
Optimizationterminatedsuccessfully.
a=0x=000000100300200
Q=7000000
分析整理后结果对比如下:
a=0x=000000100300200Q=7000000
a=0.01x=000000100.01300.01200.01Q=7000360
a=0.02x=000000100.02300.02200.02Q=7000720
a=0.03x=000000100.03300.03200.03Q=7.0011e+006
a=0.04x=000000100.04300.04200.04Q=7.0014e+006
a=0.05x=000000100.05300.05200.05Q=7.0018e+006
a=0.06x=000000100.06300.06200.06Q=7.0022e+006
a=0.07x=000000100.07300.07200.07Q=7.0025e+006
a=0.08x=000000100.08300.08200.08Q=7002880
a=0.09x=000000100.09300.09200.09Q=7.0032e+006
如果不好观测,还可以将a细分为,程序基本不变,只需改变a的步长即可,则运行后图像如下:
观察图像后,最优值随a的参加变化不明显,但总在6.88e+6到6.9e+6与7e+6到7.02e+6两个区间内缓慢增长。
3.对
(2)求解:
追求总产值最大的MATLAB程序为:
f=[-13200-11400-10800-12000-10200-9000-11200-9600-8000];
A=[100100100;010010010;001001001;-1100000-950000-900000;0-800000-680000-60000;00-1400000-1200000-10000];
b=[100300200-190000-130000-350000];
lb=[000000000];
[xoptfxopt]=linprog(f,A,b,[],[],lb,[])
Optimizationterminatedsuccessfully.
xopt=
100.0000
300.0000
200.0000
0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
fxopt=
-6.9000e+006
键入S=-Z
运行后得到原问题的目标函数最大值为S=6.9000e+006
4.敏感性分析后的MATLAB程序如下:
从a=0开始,以步长对下列模型求解;
a=0;
while(1.1-a)>1
c=[-13200-11400-10800-12000-10200-9000-11200-9600-8000];
A=[100100100;010010010;001001001;-1100000-950000-900000;0-800000-680000-60000;00-1400000-1200000-10000];
b=[100+a;300+a;200+a;-190000+a;-130000+a;-350000+a];
Aeq=[];beq=[];
vlb=[0,0,0,0,0,0,0,0,0];vub=[];
[x,val]=linprog(c,A,b,Aeq,beq,vlb,vub);
a
x=x'
Q=-val
plot(a,Q,'.'),holdon
a=a+0.01;
end
xlabel('a'),ylabel('Q')
Grid
分析整理后结果对比如下:
a=0x=100300200000000Q=6.9000e+006
a=0.01x=100.01300.01200.01000000Q=6.9004e+006
a=0.02x=100.02300.02200.02000000Q=6.9007e+006
a=0.03x=100.03300.03200.03000000Q=6.9011e+006
a=0.04x=100.04300.04200.04000000Q=6.9014e+006
a=0.05x=100.05300.05200.05000000Q=6.9018e+006
a=0.06x=100.06300.06200.06000000Q=6.9021e+006
a=0.07x=100.07300.07200.07000000Q=6.9025e+006
a=0.08x