1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,用,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,e
2、xitflag,=,quaprog,(.);,8.,x,fval,exitflag,output,=,quaprog,(.);,1,、二次规划,用,MATLAB,求解非线性规划,例,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
3、beq,VLB,VUB,),3,、,运算结果,为:,x=0.6667 1.3333 z=-8.2222,s.t.,1.,首先建立,M,文件,fun.m,定义目标函数,F,(,X,),:,function f=fun(X);,f=F(X);,2,、一般非线性规划,其中,X,为,n,维变元向量,,G(X),与,Ceq(X,),均为非线性函数组成的向量,其它变量的含义与线性规划、二次规划中相同,.,用,Matlab,求解上述问题,基本步骤分三步:,3.,建立主程序,.,非线性规划求解的函数是,fmincon,命令的基本格式如下:,(1),x=,fmincon,(fun,X,0,A,b),(2),x
4、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,文件
5、迭代的初值,参数说明,变量上下限,注意:,1,fmincon,函数提供了大型优化算法和中型优化算法。默认时,若在,fun,函数中提供了梯度(,options,参数的,GradObj,设置为,on,),,并且只有上下界存在或只有等式约束,,fmincon,函数将选择大型算法。当既有等式约束又有梯度约束时,使用中型算法。,2,fmincon,函数的中型算法使用的是序列二次规划法。在每一步迭代中求解二次规划子问题,并用,BFGS,法更新拉格朗日,Hessian,矩阵。,3,fmincon,函数可能会给出局部最优解,这与初值,X,0,的选取有关。,1,、,写成标准形式,:,s.t.,2x,1,+3x
6、2,6,s.t x,1,+4x,2,5,x,1,x,2,0,例2,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,1,先建立,M,文件,fun4.m,定义目标函数,:
7、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;,3,主程序,youh3.m,为,:,x0=-1;1;,A=;b=;,Aeq,=1 1;beq=0;,vlb,=;,vub,=;,
8、x,fval,=fmincon(fun4,x0,A,b,Aeq,beq,vlb,vub,mycon),3.,运算结果为,:,x=-1.2250 1.2250,fval,=1.8951,例,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;,3.,主程序,fxx.m,为,:,x0=3;2.5;,VLB=0 0;VUB=5 10;,x,fval,exi
9、tflag,output,=fmincon(fun,x0,VLB,VUB,mycon2),4.,运算结果为,:,x=,4.0000,3.0000,fval,=-11.0000,exitflag,=1,output=,iterations:4,funcCount,:17,stepsize,:1,algorithm:1x44 char,firstorderopt,:,cgiterations,:,应用实例:供应与选址,某公司有,6,个建筑工地要开工,每个工地的位置(用平面坐标系,a,,,b,表示,距离单位:千米)及水泥日用量,d(,吨,),由下表给出。目前有两个临时料场位于,A(5,1),,,B(
10、2,7),,,日储量各有,20,吨。假设从料场到工地之间均有直线道路相连。,(,1,)试制定每天的供应计划,即从,A,,,B,两料场分别向各工地运送多少吨水泥,使总的吨千米数最小。,(,2,)为了进一步减少吨千米数,打算舍弃两个临时料场,改建两个新的,日储量各为,20,吨,问应建在何处,节省的吨千米数有多大?,(一)、建立模型,记工地的位置为,(,ai,,,bi),,,水泥日用量为,di,,,i=1,6;,料场位置为,(,xj,,,yj,),,,日储量为,ej,,,j=1,2,;,从料场,j,向工地,i,的运送量为,Xij,。,当用临时料场时决策变量为:,X,ij,,,当不用临时料场时决策变量
11、为:,X,ij,,,x,j,,,y,j,。,(二)使用临时料场的情形,使用两个临时料场,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:,clear,a=1.25 8.
12、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
13、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),计算结果为:,x=3.0000 5.0000 0.0000 7.0000 0.0000 1.0000 0.0000,0.0000 4.0000 0
14、0000 6.0000 10.0000,fval,=136.2275,(三)改建两个新料场的情形,改建两个新料场,要同时确定料场的位置,(,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)+
15、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,定义目标函数,:,(2),
16、取初值为线性规划的计算结果及临时料场的坐标,:,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
17、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),(3),计算结果为:,x=3.0000 5.0000 0.0707 7.0000 0 0.9293
18、 0 0 3.9293 0 6.0000,10.0707 6.3875 4.3943 5.7511 7.1867,fval,=105.4626,exitflag,=1,(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.536
19、9 4.9194 5.8291 7.2852,fval,=103.4760,exitflag,=1,总的吨千米数比上面结果略优,.,(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,函数在选取初值上的重要性,.,






