优化计算
数学知识背景
以上练习介绍了优化技术的基本理论何基本解法,在无约束何有约束条件下求解问题的基本思想,而在实际问题重求解优化问题常常是有约束条件的。
主要内容
本练习考查知识点
本练习将介绍优化计算在实际运用中的两个实例,通过本练习可以了解解决实际问题中优化计算的基本方法和基本思路。
练习过程
(1) 例题
炼油厂将A,B,C三种原油加工成甲乙丙三种汽油。一桶原油加工成一桶汽油的费用为4元,每天至多能加工汽油14000桶。原油的买入价、买入量、辛烷值、硫含量,及汽油的卖出价、需求量、辛烷值、硫含量由下表给出。问如何安排生产计划,在满足需求的条件下使利润最大?
一般来说,做广告可以增加销售,估计一天向一种汽油投入一元广告费,可使这种汽油日销量增加10桶。问如何安排生产而后广告计划使利润最大? 原油类别 买入价(元/桶) 买入量(桶/天) 辛烷值(%) 硫含量(%) A 45 ≤5000 12 0.5 B 35 ≤5000 6 2.0 C 25 ≤5000 8 3.0 汽油类别 卖出价(元/桶) 需求量(桶/天) 辛烷值(%) 硫含量(%) 甲 70 3000 ≥10 ≤1.0 乙 60 2000 ≥8 ≤2.0 丙 50 1000 ≥6 ≤1.0 以下均按当天生产满足当天需求计算。 设生产甲、乙、丙三种汽油,各需A、B、C三种原油x1、y1、z1,x2、y2、z2,x3、y3、z3。则有如下约束条件:
①需求量: ②买入量:
x1+y1+z1=3000 x1+x2+x3≤5000 x2+y2+z2=2000 y1+y2+y3≤5000 x3+y3+z3=1000 z1+z2+z3≤5000 ③辛烷值: ④硫含量:
12%*x1+6%*y1+8%*z1≥10%*3000 0.5%*x1+2.0%*y1+3.0%*z1≤1.0%*3000 12%*x2+6%*y2+8%*z2≥8%*2000 0.5%*x2+2.0%*y2+3.0%*z2≤2.0%*2000
12%*x3+6%*y3+8%*z3≥6%*1000 0.5%*x3+2.0%*y3+3.0%*z3≤1.0%*1000 ⑤生产能力:x1+y1+z1+x2+y2+z2+x3+y3+z3≤14000 目标函数为利润,表达式如下:
z=0.0070*3000+0.0060*2000+0.0050*1000-0.0004*6000-0.0045*(x1+x2+x3)- 0.0035*(y1+y2+y3)-0.0025*(z1+z2+z3)
=35.6000-0.0045*(x1+x2+x3)-0.0035*(y1+y2+y3)-0.0025*(z1+z2+z3) (万元) 若令c=[0.0045,0.0045,0.0045,0.0035,0.0035,0.0035,0.0025,0.0025,0.0025], x=[x1,x2,x3,y1,y2,y3,z1,z2,z3], 则目标函数可间写成Z=35.6000-c*x 求Z的最大值即求minc*x 在命令种运行如下程序:
c=[0.0045,0.045,0.0045,0.0035,0.0035,0.0035,0.0025,0.0025,0.0025]; a1=[eye(3),eye(3),eye(3)];
a2=[ones(1,3),zeros(1,6);zeros(1,3),zeros(1,3);zeros(1,6)ones(1,3)];
a3=[-0.1200*eye(3),-0.0600*eye(3),-0.0800*eye(3);0.0050*eye(3),0.0200*eye(3), 0.0300*eye(3)]
A=[a1;a2;a3;ones(1,9)]
b=[3000,2000,1000,5000,5000,5000,-300,-160,-60,30,40,10,14000]’; v1=zeros(1,9);
x=1p(c,A,b,v1,[],[],3); x’,z=35.6000-c*x,
运行结果,如图26-1所示。 ans=
1.0e+003*
Columns 1 through7
2.4000 0.8000 0.8000 0 0 0 0.6000108
Columns 8 through 9
1.2000 0.2000 z=
12.6000
由计算结果得到结论为:每日购进原油A4000桶,原油C2000桶,利润为12.60000万元。
当投入广告费时,一天向一种汽油投入一元广告费,可使这种汽油日销量增加10桶。设对甲、乙、丙三种汽油分别投入广告费w1,w2,w3元,则它们的日需求量分别增长为3000+10*w1,2000+10*w2,1000+10*w3.
因此约束条件变为:
①需求量: ②买入量:
x1+y1+z1=3000+10*w1 x1+x2+x3≤5000 x2+y2+z2=2000+10*w2 y1+y2+y3≤5000 x3+y3+z3=1000+10*w3 z1+z2+z3≤5000 ③辛烷值:
12%*x1+6%*y1+8%*z1≥10%*(3000+10*w1)
12%*x2+6%*y2+8%*z2≥8%*(2000+10*w2) 12%*x3+6%*y3+8%*z3≥6%*(1000+10*w3) ④含量:
0.5%*x1+2.0%*y1+3.0%*z1≤1.0%*(3000+10*w1) 0.5%*x2+2.0%*y2+3.0%*z2≤2.0%*(2000+10*w2) 0.5%*x3+2.0%*y3+3.0%*z3≤1.0%*(1000+10*w3) ⑤生产能力:x1+y1+z1+x2+y2+z2+x3+y3+z3≤14000 目标函数利润表达式变为:
z=0.0070*(3000+10*w1)+0.0060*(2000+10*w2)+0.0050*(1000+10*w3)- 0.0004*(6000+10*w1+10*w2+10*w3)-0.0001*(w1+w2+w3)-0.0045*(x1+x2+x3)- 0.0035*(y1+y2+y3)-0.0025*(z1+z2+z3)
=35.6000+0.0659*w1+0.0559*w2+0.0459*w3-0.0045*(x1+x2+x3)-0.0035*(y1+ y2+y3)-0.0025*(z1+z2+z3) (万元)
若令c=[0.0045,0.0045,0.0045,0.0035,0.0035,0.0035,0.0025,0.0025,0.0025,
-0.0659,-0.0559,-0.0459],
x=[x1,x2,x3,y1,y2,y3,z1,z2,z3,w1,w2,w3], 则目标函数可简写成Z=35.6000-c*x 求Z得最大值即求min c*x 在命令区中运行如下程序:
c=[0.0045,0.0045,0.0045,0.0035,0.0035,0.0035,0.0025,0.0025,0.0025,-0.0659,-0.0559,-0.0459]
a1=[eye(3),eye(3),eye(3),-10*eye(3)];
a2=[one(1,3),zeros(1,9);zeros(1,3),zeros(1,6);zeros(1,6),ones(1,3)];
a3=[-0.1200*eye(3),-0.0600*eye(3),-0.0800*eye(3),diag([1.0000, 0.8000,0.6000]),0.0050*eye(3),0.0200*eye(3),0.0300eye(3),-diag([0.1000,0.2000,0.1000]);
A=[a1;a2;a3;ones(1,9),zeros(1.3)];
b=[3000,2000,1000,5000,5000,5000,-300,-160,-60,30,40,10,14000]’; v1=zeros(1,12);
x=1p(c,A,b,v1,[],[],3); x’,z=35.6000-c*x, 运行结果为: ans=1.0e+003*
Columns 1 through 7
2.0000 2.3333 0.6667 1.0000 3.667 0.3333 -0.0000 Columns 8 through 12
3.5000 -0.0000 0 0.7500 0
z=28.7750
结论:每日购进原油A5000桶,原油B5000桶,原油C3500桶,同时对乙种汽油投入广告费750元,利润28.7750元。将结果列表如下:
甲种汽油(桶/天) 乙种汽油(桶/天) 丙种汽油(桶/天) 利润(万原油原油原油原油原油原油原油原油原油元) A(桶B(桶C(桶A(桶B(桶C(桶A(桶B(桶C(桶/天) /天/天) /天) /天) /天) /天) /天) /天) 0 不作广2400 0 600 800 0 1200 800 0 200 12.60 告 合计3000 2000 1000 6000 (桶) 对甲作2000 1000 0 2333 3667 3500 667 333 0 28.7750 广告 合计3000 9500(作广告需求1000 13500 (桶) 增加) (2)一基金管理人的工作是,每天将现有的美元、英镑、马克、日四种货币按当天汇率相互兑换,使在满足需要的条件下,按美元计算的价值最高。设某天的汇率、现有的货币和当天的需求如下表: 美元 英镑 马克 日元 现有量需求量 (*108) (*108) 美元 1 .58928 1.743 138.3 8 6 英镑 1.697 1 2.9579 234.7 1 3 马克 .57372 .33808 1 79.346 8 1 日元 .007233 .00426 .0126 1 0 10 问该天基金管理人员如何操作(“按美元计算的价值”指兑入、兑出汇率的平均值,如1英镑相当于(1.679+(1.58928))/2=1.696993美元。
我们设计8美元中有m1,m2,m3亿分别兑换成英镑、马克、日元(剩余8-(m1+m2+m3)亿),1亿英镑中有y1,y2,y3亿分别兑换成美元、马克、日元(剩余1-(y1+y2+y3)亿),8亿马克中有k1,k2,k3亿分别兑换成美元、英镑、日元(剩余8-(k1+k2+k3)亿,则有下列约束条件:
8-(m1+m2+m3)≥0 1-(y1+y2+y3)≥0 8-(k1+k2+k3)≥0
兑换以后,需求量应满足下列约束条件:
美元数量:Z1=8-(m1+m2+m3)+1.697*y1+0.57372≥6
英镑数量:Z2=1-(y1+y2+y3)+0.58928*m1+0.33808*k2≥3 马克数量:Z3=8-(k1+k2+k3)+1.743*m2+2.9579*y2≥1 日元数量:Z4=138.3*m3+234.7*y3+79.346*k3≥10 目标函数为“按美元计算的价值”,表达式如下:
Z=Z1+Z2*(1.679+1/0.58928)2+Z3*(0.57372+1/1.743)/2+Z4*(0.007233+1/138.3)/2
若令
d1=(1.697+1/0.58928)/2,d2=(0.57372+1/1.743)/2,d3=(0.007233+1/138.3)/2;
c=[1-0.58928*d1,1-1.743*d2,1-138.3*d3,d1-1.697,d1-2.9579*d2,d1- 234.7*d3,d2-0.57372,d2-0.33808*d1,d2-79.346*d3]; x=[m1,m2,m3,y1,y2,y3,k1,k2,k3]’ 则目标函数可简写成Z=8+d1+8*d2-c*x 求Z的最大值即求min c*x
在命令区中运行如下程序:
a1=[ones(1,3),zeros(1,6);zeros(1,3),ones(1,3),zeros(1,3);zeros(1,6),ones(1,3)];
a2=[1,1,1,-1.697,0,0,-0.57372,0,0;-0.58928,0,0,1,1,1,0,-0.33808,0;0,-1.743,0,0,-2.9579,0,1,1,1;0,0,-138.3,0,0,-234.7,0,0,-79.346];
A=[a1;a2];
b=[8,1,8,2,-2,7,-10]’; d1=(1.697+1/0.58928)/2; d2=(0.57372+1/1.743)/2; d3=(0.007233+1/138.3)/2;
c=[1-0.58928*d1,1-1.743*d2,1-138.3*d3,d1-1.697,d1-2.9579*d2,d1- 234.7*d3,d2-0.57372,d2-0.33808*d1,d2-79.346*d3]; v1=zeros(1,9); x=1p(c,A,b,v1); x,z=8+d1+8+d2-c*x,
运行结果,如图26-2所示。 ans=
Columns 1 through 7
5.0910 0 0 -0.000 0.0000 1.000 5.3876
Columns 8 through 9
0 1.6124
z=
14..2872
接着运行以下程序,计算兑换后美元、英镑、马克和日元的数量: Z1=8-(x(1)+x(2)+x(3))+1.697*x(4)+0.57372*x(7); Z2=1-(x(4)+x(5)+x(6))+0.58928*x(1)+0.33808*x(8); Z3=8-(x(7)+x(8)+x(9))+1.743*x(2)+2.9579*x(5); Z4=138.3*x(3)+234.7*x(6)+79.346*x(9); Z1,Z2,Z3,Z4 运行结果为:
Z1=6.00000000000000 Z2=3
Z3=1.00000000000000
Z4=3.626396222008447e+002
结论:该天基金管理人员应将5.09095846亿美元兑换成英镑,将1亿英镑
兑换成日元,将5.38757313亿马克兑换成美元,将1.61242687亿马克兑换成日元,这样兑换后,按美元计算的价值最大为14.28724870亿美元。兑换后,美元有6亿,英镑有3亿,马克有1亿,日元有362.63962220亿,均能满足需求。
练习小结
本练习主要介绍了优化计算在实际生活中的运用,原油的生产和作广告对
销售的影响,在资金操作中如何取得最大利润,这些都是现实生活中的实际问题,而优化计算给出了令人满意的答案。
思考题
将本练习中的例题在MATLAB中实现。
因篇幅问题不能全部显示,请点此查看更多更全内容