资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,11/7/2009,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,用MATLAB软件求解,其,输入格式,如下:,1.x=quadprog(H,C,A,b);,2.x=quadprog(H,C,A,b,Aeq,beq);,3.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);,4.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X,0,);,5.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X,0,options);,6.x,fval=quaprog(.);,7.x,fval,exitflag=quaprog(.);,8.x,fval,exitflag,output=quaprog(.);,1、二次规划,用MATLAB求解非线性规划,用MATLAB软件求解,其输入格式如下:1、二次规划用MAT,例1,min f(x,1,x,2,)=-2x,1,-6x,2,+x,1,2,-2x,1,x,2,+2x,2,2,s.t. x,1,+x,2,2,-x,1,+2x,2,2,x,1,0, x,2,0,1、,写成标准形式,:,2、,输入命令,:,H=1 -1; -1 2;,c=-2 ;-6;A=1 1; -1 2;b=2;2;,Aeq=;beq=; VLB=0;0;VUB=;,x,z=quadprog(H,c,A,b,Aeq,beq,VLB,VUB),3、,运算结果,为:,x =0.6667 1.3333 z = -8.2222,s.t.,例1 min f(x1,x2)=-2x1-6x2+x1,1.,首先建立M文件,fun.m,定义目标函数F(X):,function f=fun(X);,f=F(X);,2、一般非线性规划,其中,X,为,n,维变元向量,,G(X),与,Ceq(X),均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同.用Matlab求解上述问题,基本步骤分三步:,1. 首先建立M文件fun.m,定义目标函数F(X):2、,3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格式如下:,(1),x=,fmincon,(fun,X,0,A,b),(2),x=,fmincon,(fun,X,0,A,b,Aeq,beq),(3),x=,fmincon,(fun,X,0,A,b, Aeq,beq,VLB,VUB),(4),x=,fmincon,(fun,X,0,A,b,Aeq,beq,VLB,VUB,nonlcon),(5),x=,fmincon,(fun,X,0,A,b,Aeq,beq,VLB,VUB,nonlcon,options),(6),x,fval=,fmincon(.),(7),x,fval,exitflag=,fmincon(.),(8)x,fval,exitflag,output=,fmincon(.),输出极值点,M,文件,迭代的初值,参数说明,变量上下限,3. 建立主程序.非线性规划求解的函数是fmincon,命令,注意:,1 fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options参数的GradObj设置为on),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。,2 fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。,3 fmincon函数可能会给出局部最优解,这与初值,X,0,的选取有关。,注意:,1、,写成标准形式,:,s.t.,2x,1,+3x,2,6,s.t x,1,+4x,2,5,x,1,x,2,0,例2,1、写成标准形式: 2x1+3x2,2、,先建立M-文件 fun3.m:,function f=fun3(x);,f=-x(1)-2*x(2)+(1/2)*x(1)2+(1/2)*x(2)2,3、再建立主程序youh2.m:,x0=1;1;,A=2 3 ;1 4; b=6;5;,Aeq=;beq=;,VLB=0;0; VUB=;,x,fval=fmincon(fun3,x0,A,b,Aeq,beq,VLB,VUB),4、,运算结果为:,x = 0.7647 1.0588,fval = -2.0294,2、先建立M-文件 fun3.m:3、再建立主程序youh2,1,先建立M文件 fun4.m,定义目标函数:,function f=fun4(x);,f=exp(x(1),*(4*x(1)2+2*x(2)2+4*x(1)*x(2)+2*x(2)+1);,x,1,+x,2,=0,s.t. 1.5+x,1,x,2,- x,1,- x,2,0,-x,1,x,2,10,0,例3,2再建立M文件mycon.m定义非线性约束:,function g,ceq=mycon(x),g=x(1)+x(2);1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10;,1先建立M文件 fun4.m,定义目标函数:,3主程序youh3.m为:,x0=-1;1;,A=;b=;,Aeq=1 1;beq=0;,vlb=;vub=;,x,fval=fmincon(fun4,x0,A,b,Aeq,beq,vlb,vub,mycon),3.,运算结果为,:,x = -1.2250 1.2250,fval = 1.8951,3主程序youh3.m为:3. 运算结果为:,例4,1先建立M-文件fun.m定义目标函数:,function f=fun(x);,f=-2*x(1)-x(2);,2再建立M文件mycon2.m定义非线性约束:,function g,ceq=mycon2(x),g=x(1)2+x(2)2-25;x(1)2-x(2)2-7;,例4 1先建立M-文件,3. 主程序fxx.m为:,x0=3;2.5;,VLB=0 0;VUB=5 10;,x,fval,exitflag,output,=fmincon(fun,x0,VLB,VUB,mycon2),3. 主程序fxx.m为:,4. 运算结果为:,x =,4.0000,3.0000,fval =-11.0000,exitflag = 1,output =,iterations: 4,funcCount: 17,stepsize: 1,algorithm: 1x44 char,firstorderopt: ,cgiterations: ,4. 运算结果为:,应用实例: 供应与选址,某公司有6个建筑工地要开工,每个工地的位置(用平面坐标系a,b表示,距离单位:千米 )及水泥日用量d(吨)由下表给出。目前有两个临时料场位于A(5,1),B(2,7),日储量各有20吨。假设从料场到工地之间均有直线道路相连。,(1)试制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。,(2)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为20吨,问应建在何处,节省的吨千米数有多大?,应用实例: 供应与选址 某公司有6个建筑工地要开,(一)、建立模型,记工地的位置为(ai,bi),水泥日用量为di,i=1,6;料场位置为(xj,yj),日储量为ej,j=1,2;从料场j向工地i的运送量为Xij。,当用临时料场时决策变量为:X,ij,,,当不用临时料场时决策变量为:X,ij,,x,j,,y,j,。,(一)、建立模型 记工地的位置为(ai,bi),水泥日用,(二)使用临时料场的情形,使用两个临时料场A(5,1),B(2,7).求从料场j向工地i的运送量为X,ij,,在各工地用量必须满足和各料场运送量不超过日储量的条件下,使总的吨千米数最小,这是线性规划问题. 线性规划模型为:,设X,11,=X,1, X,21,= X,2, X,31,= X,3, X,41,= X,4, X,51,= X,5, X,61,= X,6,X,12,= X,7, X,22,= X,8, X,32,= X,9, X,42,= X,10, X,52,= X,11, X,62,= X,12,编写程序gying1.m:,(二)使用临时料场的情形 使用两个临时料场A(5,clear,a=1.25 8.75 0.5 5.75 3 7.25;,b=1.25 0.75 4.75 5 6.5 7.75;,d=3 5 4 7 6 11;,x=5 2;,y=1 7;,e=20 20;,for i=1:6,for j=1:2,aa(i,j)=sqrt(x(j)-a(i)2+(y(j)-b(i)2);,end,end,CC=aa(:,1); aa(:,2);,A=1 1 1 1 1 1 0 0 0 0 0 0,0 0 0 0 0 0 1 1 1 1 1 1;,B=20;20;,Aeq=1 0 0 0 0 0 1 0 0 0 0 0,0 1 0 0 0 0 0 1 0 0 0 0,0 0 1 0 0 0 0 0 1 0 0 0,0 0 0 1 0 0 0 0 0 1 0 0,0 0 0 0 1 0 0 0 0 0 1 0,0 0 0 0 0 1 0 0 0 0 0 1 ;,beq=d(1);d(2);d(3);d(4);d(5);d(6);,VLB=0 0 0 0 0 0 0 0 0 0 0 0;VUB=;,x0=1 2 3 0 1 0 0 1 0 1 0 1;,xx,fval=linprog(CC,A,B,Aeq,beq,VLB,VUB,x0),clearB=20;20;,计算结果为:,x = 3.0000 5.0000 0.0000 7.0000 0.0000 1.0000 0.0000,0.0000 4.0000 0.0000 6.0000 10.0000,fval = 136.2275,计算结果为:x = 3.0000 5.0000 0.0,(三)改建两个新料场的情形,改建两个新料场,要同时确定料场的位置(xj,yj)和运送量Xij,在同样条件下使总吨千米数最小。这是非线性规划问题。非线性规划模型为:,(三)改建两个新料场的情形 改建两个新料场,要同时确定料,function f=liaoch(x),a=1.25 8.75 0.5 5.75 3 7.25;,b=1.25 0.75 4.75 5 6.5 7.75;,d=3 5 4 7 6 11;,e=20 20;,f1=0;,for i=1:6,s(i)=sqrt(x(13)-a(i)2+(x(14)-b(i)2);,f1=s(i)*x(i)+f1;,end,f2=0;,for i=7:12,s(i)=sqrt(x(15)-a(i-6)2+(x(16)-b(i-6)2);,f2=s(i)*x(i)+f2;,end,f=f1+f2;,设 X,11,=X,1, X,21,= X,2, X,31,= X,3, X,41,= X,4, X,51,= X,5, X,61,= X,6,X,12,= X,7, X,22,= X,8, X,32,= X,9, X,42,= X,10, X,52,= X,11, X,62,= X,12,x,1,=X,13, y,1,=X,14, x,2,=X,15, y,2,=X,16,(1)先编写M文件liaoch.m定义目标函数:,function f=liaoch(x)f1=s(i)*x(,(2) 取初值为线性规划的计算结果及临时料场的坐标:,x0=3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7;,编写主程序gying2.m.,clear,% x0=2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2;,x0=3 5 0 7 0 1 0 0 4 0 6 10 5 1 2 7;,A=1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0,0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0;,B=20;20;,Aeq=1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0,0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0,0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0,0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0,0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0,0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0;,beq=3 5 4 7 6 11;,vlb=zeros(12,1);-inf;-inf;-inf;-inf;,vub=;,x,fval,exitflag=fmincon(liaoch,x0,A,B,Aeq,beq,vlb,vub),(2) 取初值为线性规划的计算结果及临时料场的坐标:clea,(3) 计算结果为:,x= 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000,10.0707 6.3875 4.3943 5.7511 7.1867,fval = 105.4626,exitflag = 1,(3) 计算结果为:x= 3.0000 5.0000,(4) 若修改主程序gying2.m, 取初值为上面的计算结果:,x,0,= 3.0000 5.0000 0.0707 7.0000 0 0.9293 0 0 3.9293 0 6.0000 10.0707 6.3875 4.3943 5.7511 7.1867,得结果为:,x=3.0000 5.0000 0.3094 7.0000 0.0108 0.6798 0 0 3.6906 0 5.9892 10.3202 5.5369 4.9194 5.8291 7.2852,fval =103.4760,exitflag = 1,总的吨千米数比上面结果略优.,(4) 若修改主程序gying2.m, 取初值为上面的计算,(5) 若取初值为:,x0=3 5 4 7 1 0 0 0 0 0 5 11 5.6348 4.8687 7.2479 7.7499,则计算结果为:,x=3.0000 5.0000 4.0000 7.0000 1.0000 0 0 0 0 0 5.0000 11.0000 5.6959 4.9285 7.2500 7.7500,fval =89.8835,exitflag = 1,总的吨千米数89.8835比上面结果更好.,通过此例可看出fmincon函数在选取初值上的重要性.,(5) 若取初值为: 通过此例可看出fmincon函数在选取,
展开阅读全文