《MATLAB解决数学模型中规划问题》由会员分享,可在线阅读,更多相关《MATLAB解决数学模型中规划问题(8页珍藏版)》请在金锄头文库上搜索。
1、数学模型数学规划1. 某厂生产甲乙两种口味的饮料,每百箱甲饮料需用原料6千克,工人10名,可获利10万元;每百箱乙饮料需用原料5千克,工人20名,可获利9万元.今工厂共有原料60千克,工人150名,又由于其他条件所限甲饮料产量不超过8百箱.问如何安排生产计划,即两种饮料各生产多少使获利最大.进一步讨论: 1)若投资0.8万元可增加原料1千克,问应否作这项投资. 2)若每百箱甲饮料获利可增加1万元,问应否改变生产计划.解:基本模型决策变量:设生产x1百箱甲饮料,x2百箱乙饮料目标函数:设获利为z=10x+9y万元约束条件:原料和工人的数量均有限,6x1+5x260,10x1+20x2150,又有
2、其他条件所限x18非负约束:x1,x2均不能为负值,即x10,x20综上可得:Max z=10x1+9x2 s.t. 6x1+5x260 10x1+20x2150 0x18 0x2编写Matlab程序如下:C=-10 -9;A=6 5;10 20;1 0;B=60 150 8;Aeq=;beq=;vlb=0;0;vub=;x,fval=linprog(C,A,B,Aeq,beq,vlb,vub)运行结果如下:x = 6.4286 4.2857fval =-102.8571结果分析:若取整数箱饮料,则应该生产6百箱甲饮料,4百箱乙饮料,可最大获利96万元。进一步讨论:1)若投资0.8万元可增加原
3、料1千克,设增加原料x3千克,则目标函数变为:z=10x1+9x2-0.8x3约束条件变为:s.t 6x1+5x2-x360 10x1+20x2150 0x18 0x2 0x3Matlab程序如下:C=-10 -9 0.8;A=6 5 -1;10 20 0;1 0 0;B=60 150 8;Aeq=;beq=;vlb=0;0;0;vub=;x,fval=linprog(C,A,B,Aeq,beq,vlb,vub)运行结果如下:x = 8.0000 3.5000 5.5000fval =-107.1000结果分析:因为107.1000 102.8571,所以投资增加原料可以使得最大获利增加,商家
4、应该考虑进行这项投资。2) 若每百箱甲饮料获利可增加1万元,则目标函数变为:z=11x1+9x2考虑解除甲饮料产量不超过8百箱的约束,则约束条件变为:s.t 6x1+5x260 10x1+20x2150 0x1 0x2Matlab程序如下:C=-11 -9;A=6 5;10 20;1 0;B=60 150 8;Aeq=;beq=;vlb=0;0;vub=;x,fval=linprog(C,A,B,Aeq,beq,vlb,vub)运行结果如下:x =8.0000 2.4000fval =-109.6000结果分析:因为109.6000 107.1000 102.8571,所以甲饮料的生产可以使得
5、获利增加,商家应该考虑改变生产计划。2. 某厂向用户提供发动机,合同规定,第一、二、三季度末分别交货40台、60台、80台每季度的生产费用为f(x)=ax+bx2(元),其中x是该季生产的台数若交货后有剩余,可用于下季度交货,但需支付存储费,每台每季度c元已知工厂每季度最大生产能力为100台,第一季度开始时无存货,设a=50、b=0.2、c=4,问工厂应如何安排生产计划,才能既满足合同又使总费用最低讨论a、b、c变化对计划的影响,并作出合理的解释解:基本模型决策变量:设第1,2,3季度分别生产x1,x2,x3台发动机,第1,2季度末分别有存货40-x1,x1+x2-100台,第3季度末无存货目
6、标函数:设总费用为z=a(x1+x2+x3)+b(x12+ x22 +x32)+c(x1-40)+(x1+x2-100)约束条件:生产的发动机应该在第3季度末全部卖出,则有x1+x2+x3=180;同时要保证第1,2季度能供货且有能力生产,要求x140,x1+x2100,100x1,100x2,100x3非负约束:x1,x2,x30综上可得:Max z= a(x1+x2+x3)+b(x12+ x22 +x32)+c(x1-40)+(x1+x2-100) s.tx1+x2+x3=180 x1+x2100 x1400x1,x2,x3100Matlab程序如下:a=50;b=0.2;c=4;H=di
7、ag(2*b*ones(1,3);C=a+2*c,a+c,a;A=-1,0,0;-1,-1,0;B=-40,-100;Aeq=1 1 1;beq=180;vlb=0 0 0;vub=100 100 100;x,z=quadprog(H,C,A,B,Aeq,beq,vlb,vub)运行结果如下:x = 50.0000 60.0000 70.0000z = 11840得到最优整数解,工厂应安排第1,2,3季度分别生产50,60,70台发动机以既满足合同又使总费用最低。进一步讨论参数a,b,c对生产计划的影响:1)、固定b,c不变,a变化(分别取a20,60),仍运行上述程序,结果为:ax1x2x3
8、z20506070588060506070130802)、固定a,c不变,b变化(分别取b0.15,0.5),结果为:bx1x2x3z0.1546.76073.3107270.5566064145443)、固定a,b不变,c变化(分别取c2,6),结果为:cx1x2x3z255606511230645607511310结果分析: 由于生产总量是恒定的,即x1+x2+x3=180,而z=a(x1+x2+x3)+b(x12+ x22 +x32)+c(x1-40)+(x1+x2-100),故a的变化不会影响生产计划;b是x的二次项的系数,它反映了生产费用。当b比较大时,生产费用占主导地位,x1,x2
9、,x3应趋于相等;而当b较小时,贮存费占主导地位,此时应使每季度的贮存量较少。c反映了贮存费。当c较大时,贮存费占主导地位,此时应使贮存量尽量少;而当c较小时,生产费用占主导地位,x1,x2,x3应趋于相等。3.一基金管理人的工作是,每天将现有的美元、英镑、马克、日元四种货币按当天汇率相互兑换,使在满足需要的条件下,按美元计算的价值最高设某天的汇率、现有货币和当天需求如下:美元英镑马克日元现有量需求量美元1.589281.743138.386英镑1.69712.9579234.713马克.57372.33808179.34681日元.007233.00426.01261010问该天基金管理人应
10、如何操作(“按美元计算的价值”指兑入、兑出汇率的平均值,如1英镑相当于=1.696993美元)解:基本模型决策变量:因为日元现有量为0,故不予以考虑。设该天基金管理人兑换操作如下:美元英镑马克日元现有量(108)需求量(108)美元x1x2x3x486英镑x5x6x7x813马克x9x10x11x1281y1,y2,y3分别表示英镑、马克、日元按美元计算的价值y1=(1.697+(1/0.58928)/2y2=(0.57372+(1/1.743)/2y3=(0.007233+(1/138.3)/2目标函数:Max z=x1+x2*0.58928*y1+x3*1.743*y2+x4*138.3*
11、y3+x5*1.697+x6*y1+x7*2.9579*y2+x8*234.7*y3+x9*0.57372+x10*0.33808*y1+x11*y2+x12*79.346*y3约束条件:需满足需求量,同时各种货币的数量是有限的非负约束:x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x120总上可得:Max z= x1+x2*0.58928*y1+x3*1.743*y2+x4*138.3*y3+x5*1.697+x6*y1+x7*2.9579*y2+x8*234.7*y3+x9*0.57372+x10*0.33808*y1+x11*y2+x12*79.346*y3s.t
12、 x1+x2+x3+x4=8 x5+x6+x7+x8=1 x9+x10+x11+x12=8 x1+1.697x5+0.57372x96 0.58928x2+x6+0.33808x103 1.743x3+2.9579x7+x111 138.3x4+234.7x8+79.346x1210Matlab程序如下:y1=(1.697+(1/0.58928)/2;y2=(0.57372+(1/1.743)/2;y3=(0.007233+(1/138.3)/2;C=-1, -0.58928*y1, -1.743*y2, -138.3*y3, -1.697,-y1, -2.9579*y2, -234.7*y3
13、, -0.57372, -0.33808*y1, -y2, -79.346*y3;A=-1 0 0 0 -1.697 0 0 0 -0.57372 0 0 0;0 -0.58928 0 0 0 -1 0 0 0 -0.33808 0 0;0 0 -1.743 0 0 0 -2.9579 0 0 0 -1 0;0 0 0 -138.3 0 0 0 -234.7 0 0 0 -79.346;B= -6,-3,-1,-10;Aeq=1 1 1 1 0 0 0 0 0 0 0 0 ; 0 0 0 0 1 1 1 1 0 0 0 0 ;0 0 0 0 0 0 0 0 1 1 1 1;beq=8 1 8;vlb=zeros(1,12);vub=;x,fval=linprog(C,A,B,Aeq,beq,vlb,vub)运行结果如下:x = 2.9090 5.0910 0.0000 0.0000 0.0000 0.0000