数学实验与Matlab05101520250102030-10-50510最优化方法最优化方法许多生产计划与管理问题都可以归纳为最优化问题,最优化模型是数学建模中应用最广泛的模型之一,其内容包括线性规划、整数线性规划、非线性规划、动态规划、变分法、最优控制等.近几年来的全国大学生数学建模竞赛中,几乎每次都有一道题要用到此方法.目标函数约束条件可行解域xpjxhmixgtsxfji,,2,10)(,,2,1,0)(..)(min线性规划xpjxhmixgtsxfji,,2,10)(,,2,1,0)(..)(min若)(),(),(xhxgxfii都是线性函数,则称为线性规划问题,简称LP问题用MATLAB优化工具箱解线性规划minz=cXbAXts..1、模型:命令:x=linprog(c,A,b)2、模型:minz=cXbAXts..beqXAeq命令:x=linprog(c,A,b,Aeq,beq)注意:若没有不等式:存在,则令A=[],b=[].bAX3、模型:minz=cXbAXts..beqXAeqVLB≤X≤VUB命令:[1]x=linprog(c,A,b,Aeq,beq,VLB,VUB)[2]x=linprog(c,A,b,Aeq,beq,VLB,VUB,X0)注意:若没有等式约束:,则令Aeq=[],beq=[];其中X0表示初始点beqXAeq4、命令:[x,fval]=linprog(…)返回最优解x及x处的目标函数值fval.例1321436minxxxz120..321xxxts301x5002x203x解:编写M文件xxgh2.m如下:c=[634];A=[010];b=[50];Aeq=[111];beq=[120];vlb=[30,0,20];vub=[];[x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)321)436(minxxxz32120030xxx50010,120111..321321xxxxxxts某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为800和900,三种工件的数量分别为400、600和500,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,又使加工费用最低?单位工件所需加工台时数单位工件的加工费用车床类型工件1工件2工件3工件1工件2工件3可用台时数甲0.41.11.013910800乙0.51.21.311128900例(任务分配问题)解设在甲车床上加工工件1、2、3的数量分别为x1、x2、x3,在乙车床上加工工件1、2、3的数量分别为x4、x5、x6。可建立以下线性规划模型:6543218121110913minxxxxxxz6,,2,1,09003.12.15.08001.14.0500600400x..654321635241ixxxxxxxxxxxxtsiS.t.Xz8121110913min9008003.12.15.000000011.14.0X500600400100100010010001001X,0654321xxxxxxX改写为:编写M文件如下:f=[1391011128];A=[0.41.11000;0000.51.21.3];b=[800;900];Aeq=[100100;010010;001001];beq=[400600500];vlb=zeros(6,1);vub=[];[x,fval]=linprog(f,A,b,Aeq,beq,vlb,vub)结果:x=0.0000600.00000.0000400.00000.0000500.0000fval=1.3800e+004即在甲机床上加工600个工件2,在乙机床上加工400个工件1、500个工件3,可在满足条件的情况下使总加工费最小为13800。1.首先建立M文件fun.m,定义目标函数F(X):functionf=fun(X);f=F(X);非线性规划minF(X)s.tG(X)0Ceq(X)=0AXbAeqX=beqVLBXVUB其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成的向量.用Matlab求解上述问题,基本步骤分三步:2.若约束条件中有非线性约束:G(X)0或Ceq(X)=0,则建立M文件nonlcon.m定义函数G(X)与Ceq(X):function[G,Ceq]=nonlcon(X)G=...Ceq=...3.建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:(1)x=fmincon(‘fun’,X0,A,b)(2)x=fmincon(‘fun’,X0,A,b,Aeq,beq)(3)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB)(4)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)(6)[x,fval]=fmincon(...)输出极值点M文件迭代的初值参数说明变量上下限注意:fmincon函数可能会给出局部最优解,这与初值X0的选取有关。1、写成标准形式:s.t.00546322121xxxx2100xx22212121212minxxxxf22212121212minxxxxf2x1+3x26s.tx1+4x25x1,x20例32、先建立M-文件fun3.m:functionf=fun3(x);f=-x(1)-2*x(2)+(1/2)*x(1)^2+(1/2)*x(2)^23、再建立主程序youh2.m:x0=[1;1];A=[23;14];b=[6;5];Aeq=[];beq=[];VLB=[0;0];VUB=[];[x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)4、运算结果为:x=0.76471.0588fval=-2.0294