资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,用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、二次,型,规划,解非线性规划,例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.,首先建立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=,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,文件,迭代的初值,参数说明,变量上下限,注意:,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,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,定义目标函数:,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=;,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,exitflag,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(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,,,当不用临时料场时决策变量为: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.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),计算结果为:,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,(三)改建两个新料场的情形,改建两个新料场,要同时确定料场的位置(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定义目标函数:,(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),(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,(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,总的吨千米数比上面结果略优.,(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函数在选取初值上的重要性.,
展开阅读全文