实验9非线性规划

实验 9

【实验目的】

非线性规划

1. 了解非线性优化问题求解的基本思想,掌握用 MATLAB 优化工具箱解非线性规划的基本 方法; 2. 练习建立实际问题的非线性规划模型。 【实验内容】 【题目 3】 对问题

2 min{100(x2  x1 )2  (1  x1 )2  90(x 4  x3 )2  (1  x3 )2  10.1 1  x2 )2 [( 2

    (1  x 4 )2 ]  19.8 x 2  1)(x 4  1)}增加以下条件,并分别取初值(3, 1, 3, 1)和 (

(3, , , ),求解非线性规划: 131

(1)  10 

x i  10 ;

(2) 10  x i  10,x 1x 2  x 1  x 2  1.5  0,x 1x 2  10  0, 100  x 1x 2x 3x 4  100 ;  (3)  10  xi  10,x1x 2  x1  x 2  1.5  0,x1x 2  10  0,x1  x 2  0,x1x 2x3x 4  16 。 再试取不同的初值或用分析梯度计算,比较计算结果,你能从中得到什么启示? 1.1 目标函数的 M 文件的编写

2 设 f(x )  100(x2  x1 )2  (1  x1 )2  90 x 4  x3 )2  (1  x3 )2  10.1 1  x2 )2 ( [( 2

 (1  x 4 )2 ]  19.8 x 2  1)(x 4  1)}。 (

现在需要 f(x)的梯度,下面利用 matlab 里的 diff 命令求解梯度,建立文件 tidu.m

symsx1x2x3x4; z=100*(x2-x1^2)^2+(1-x1)^2+90*(x4-x3^2)^2+(1-x3)^2+10.1*((1-x2)^2+(1x4)^2)+19.8*(x2-1)*(x4-1); zx1=diff(z,x1);zx2=diff(z,x2);zx3=diff(z,x3);zx4=diff(z,x4); [zx1; zx2; zx3; zx4 ]

输出结果如下 ans = 2*x1 - 400*x1*(x2 - x1^2) - 2 - 200*x1^2 + (1101*x2)/5 + (99*x4)/5 - 40 2*x3 - 360*x3*(x4 - x3^2) - 2 - 180*x3^2 + (99*x2)/5 + (1001*x4)/5 - 40

由于可能用到黑塞矩阵,下面用 diff 命令求函数 f(x)的黑塞矩阵,建立文件 hessian.m

zx1x1=diff(zx1,x1);zx1x2=diff(zx1,x2);zx1x3=diff(zx1,x3);zx1x4=diff(z x1,x4); zx2x2=diff(zx2,x2);zx2x3=diff(zx2,x3);zx2x4=diff(zx2,x4); zx3x3=diff(zx3,x3);zx3x4=diff(zx3,x4); zx4x4=diff(zx4,x4); [zx1x1,zx1x2,zx1x3,zx1x4;zx1x2,zx2x2,zx2x3,zx2x4;zx1x3,zx2x3,zx3x3,zx 3x4;zx1x4,zx2x4,zx3x4,zx4x4;]

输出结果如下: ans = [ 1200*x1^2 - 400*x2 + 2, -400*x1, 0, 0] [ -400*x1, 1101/5, 0, 99/5] [ 0, 0, 1080*x3^2 - 360*x4 + 2, -360*x3] [ 0, 99/5, -360*x3, 1001/5] 下面编写目标函数的 M 文件 fun3.m:

f=100*(x(2)-x(1)^2)^2+(1-x(1))^2+90*(x(4)-x(3)^2)^2+(1-x(3))^2+10.1*( (1-x(2))^2+(1-x(4))^2)+19.8*(x(2)-1)*(x(4)-1); ifnargout>1 g(1)=2*x(1) - 400*x(1)*(x(2) - x(1)^2) - 2; g(2)=- 200*x(1)^2 + (1101*x(2))/5 + (99*x(4))/5 - 40 g(3)=2*x(3) - 360*x(3)*(x(4) - x(3)^2) - 2 g(4)=- 180*x(3)^2 + (99*x(2))/5 + (1001*x(4))/5 - 40 end ifnargout>2 H=[ 1200*x(1)^2 - 400*x(2) + 2, -400*x(1), -400*(x)1, 0, 0, end end 99/5, 1101/5, 0, -360*x3, 0, 99/5 1001/5]; 0

0, 1080*x3^2 - 360*x4 + 2, -360*x3

1.2 第一小问的求解 由于第一小问的约束条件只有上下限约束:  10  束的 M 文件。 又由于第一小问的约束条件只有上下限约束, 除了一般的中等规模算法之外, 还可使用 大规模算法。 下面利用 matlab 的 fmincon 命令

求解,分别使用中等规模的数值、分析算法以及大规 模的分析梯度算法求解。建立文件 fmincon31.m。

x0=[-3,-1,-3,-1];

x i  10 ,故无需编写非线性约

%中等规模算法(数值算法) opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); [x11,fv11,ef11,out11]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt1); %中等规模算法(分析算法) opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','DerivativeCheck','o n'); [x12,fv12,ef12,out12]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt2); %大规模算法(分析算法) opt1=optimset('largescale','on','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','Hessian','on','Deri vativeCheck','on'); [x13,fv13,ef13,out13]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt2); % results of solutions solutions=[x11;x12;x13]; funvalues=[fv11;fv12;fv13]; iterations=[out11.funcCount;out12.funcCount;out13.funcCount]; rr1=[solutions,funvalues,iterations]

按照上述以上程序,分别设置初值为[3,1,3,1],[-2,-2,-2,-2],[2,2,2,2],并将结果整理得 到如下表格: 初值 [-3,-1, -3,-1] [3,1, 3,1] [-2,-2, -2,-2] [2,2, 2,2] 算法 中等规模 大规模 中等规模 大规模 中等规模 大规模 中等规模 大规模 梯度 数值 分析 分析 数值 分析 分析 数值 分析 分析 数值 分析 分析 最优解 x1 1.0002 1.0002 0.9984 1.0001 1.0002 1.0011 1.0000 1.0000 0.9997 1.0001 1.0001 1.0010 最优解 X2 1.0004 1.0004 0.9968 1.0002 1.0004 1.0023 1.0000 1.0000 0.9995 1.0002 1.0002 1.0020 最优解 X3 0.9998 0.9998 1.0017 1.0000 0.9998 0.9987 1.0000 1.0000 1.0002 0.9999 0.9999 0.9990 最优解 X4 0.9996 0.9996 1.0034 1.0000 0.9997 0.9975 1.0000 1.0000 1.0003 0.9998 0.9998 0.9979 最优值 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0 0 0.0000 0.0000 0.0000 0.0000 目标函数 调用次数 136.0000 67.0000 204.0000 368.0000 160.0000 37.0000 12.0000 9.0000 302.0000 102.0000 54.0000 49.0000

对上表中的数据进行分析,可以得到以下结论: (1)使用中等规模算法时,若给出分析梯度,但是目标函数的调用次数会明显减少。

故对本问题,给出分析梯度对结果有积极影响。 (2)对于本题,初值取[-3,-1,-3,-1]和[-2,-2,-2,-2]时,使用中等规模算法的迭代次数和目 标函数使用次数明显小于使用大规模算法的,但是初值取[3,1,3,1]和[2,2,2,2]时,使用中等规 模算法的迭代次数和目标函数使用次数大于使用大规模算法的。 (3)对于本题,使用大规模算法得到的最优解和最优值均不如使用大规模算法得到的 结果好。 (4)对于本题,初值的改变并不影响最终的结果。 (5) 对第一小问,最优解为 x1= x2= x3= x4=1,最优值为 f(x)=0。 1.3 第二小问的求解 由于第二小问的约束条件不是线

性的,故需要编写约束函数的 M 文件。 1.3.1 非线性约束函数的 M 文件的编写 第二小文的非线性约束条件有:

x1x 2  x1  x 2  1.5  0,

x1x 2  10  0,

 100  x 1x 2x 3x 4  100

上下界约束条件有:

 10  x i  10,

编写如下文件 con32.m

function [c,ceq,g,geq]=con32(x) c=[x(1)*x(2)-x(1)-x(2)+1.5;-10-x(1)*x(2);x(1)*x(2)*x(3)*x(4)-100;-100 -x(1)*x(2)*x(3)*x(4)]; ceq=0; ifnargout>2 g=[x(2)-1,-x(2),x(2)*x(3)*x(4),-x(2)*x(3)*x(4);x(1)-1,-x(1),x(1)*x(3) *x(4),-x(1)*x(3)*x(4);0,0,x(1)*x(2)*x(4),-x(1)*x(2)*x(4);0,0,x(1)*x(2 )*x(3),-x(1)*x(2)*x(3)]; geq=[0;0;0;0]; end end

1.3.2 用 fmincon 命令求解 编写如下程序 fmincon32.m

x0=[-3,-1,-3,-1]; %-------------数值梯度------------opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); [x1,fv1,ef1,out1]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10,

10,10,10],@con32,opt1); [c11,c12]=con32(x); %--------------·分析梯度-------------opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','DerivativeCheck','o n'); [x2,fv2,ef2,out2]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10, 10,10,10],@con32,opt2); [c21,c22]=con32(x); %--------- results of solutions-------solutions=[x1;x2]; funvalues=[fv1;fv2]; iterations=[out1.funcCount;out2.funcCount]; rr1=[solutions,funvalues,iterations]

按照上述方法,将初值分别设为[3,1,3,1],[-2,-2,-2,-2],[2,2,2,2],并将输出结果进行整 理,得到如下表格: 初值 [-3,-1, -3,-1] [3,1, 3,1] [-2,-2, -2,-2] [2,2, 2,2] 梯度 数值 分析 数值 分析 数值 分析 数值 分析 最优解 x1 最优解 X2 最优解 X3 最优解 X4 最优值 目标函数 调用次数

1.4200 1.4200 1.4206 1.4206 1.4200 1.4200 -1.1082 -1.1082

-0.1904 -0.1904 -0.1888 -0.1888 -0.1904 -0.1904 1.2372 1.2372

1.4661 1.4661 -1.4394 -1.4394 1.4660 1.4660 0.8803 0.8803

2.1511 2.1511 2.0813 2.0813 2.1511 2.1511 0.7743 0.7742

487.9879 487.9879 493.7994 493.7994 487.9877 487.9876 4.4898 4.4898

97 52 111 60 164 96 282 122

通过对数据的分析,可以得到以下结论: (1)使用中等规模算法(SQP)时,若给出分析梯度,目标函数的调用次数会明显减 少。故对本问题,给出分析梯度对结果有积极影响。 (2)无论采用是不是分析梯度,得到的最优解和最优值都是一样的。 (3)对于本题,选择的初值不同,得到的结果也不同。 1.4 第三小问的求解 1.4.1 非线性约束函数的 M 文件的编写 第二小问的非线性约束条件有:

x1x 2  x1  x 2  1.5  0,

x1x 2  10  0,

x1x 2x 3x 4  16

上下界约束条件有:

 10  x i  10,

线性约束有:

x 1  x 2  0,

编写如下文件con33.m

function [c,ceq,g,geq]=con33(x) c=[x(1)*x(2)-x(1)-x(2)+1.5;-10-x(1)*x(2)]; ceq=x(1)*x(2)*x(3)*x(4)-16; ifnargout>2 g=[x(2)-1,-x(2);x(1)-1,-x(1);0,0;0,0]; geq=[x(2)*x(3)*x(4);x(1)*x(3)*x(4);x(1)*x(2)*

82.8559 ef = 5 out = iterations: 199 funcCount: 3552 lssteplength: 1 stepsize: 1.1586e-005 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: 13.5346 constrviolation: 3.3885e-020 message: [1x843 char] 将运行结果进行整理,得到如下表格:

工地(i) C12 C12

1 0 3

2 5 0

3 0 4

4 0 7

5 0 6

6 11 0

料场 (7.2500,7.2500) (3.3565, 5.6060)

总吨公里数为82.8559,比用原临时料场时的总吨公里数减小了53.3441。 2.4 程序改进 这个问题的等式约束简单,可以直接融入目标函数中去。 修改目标函数 M 文件如下。

function f=xuanzhifun1(x) f=x(5)*((x(1)-1.25)^2+(x(3)-1.25)^2)^0.5 ..., +x(6)*((x(1)-8.75)^2+(x(3)-0.75)^2)^0.5 ..., +x(7)*((x(1)-0.5)^2+(x(3)-4.75)^2)^0.5 ..., +x(8)*((x(1)-5.75)^2+(x(3)-5)^2)^0.5 ..., +x(9)*((x(1)-3)^2+(x(3)-6.5)^2)^0.5 ..., +x(10)*((x(1)-7.25)^2+(x(3)-7.25)^2)^0.5 ..., +(3-x(5))*((x(2)-1.25)^2+(x(4)-1.25)^2)^0.5 ..., +(5-x(6))*((x(2)-8.75)^2+(x(4)-0.75)^2)^0.5 ..., 21 +(4-x(7))*((x(2)-0.5)^2+(x(4)-4.75)^2)^0.5 ..., +(7-x(8))*((x(2)-5.75)^2+(x(4)-5)^2)^0.5 ..., +(6-x(9))*((x(2)-3)^2+(x(4)-6.5)^2)^0.5 ..., +(11-x(10))*((x(2)-7.25)^2+(x(4)-7.25)^2)^0.5; end

这样, 目标函数自变量的维数下降了不少, 可能对程序的运行和问题的解决有积极影响。 相应的,运行程序修改如下。

x0=[5,2,1,7,0,0,0,0,0,0]; A1=[0,0,0,0,1,1,1,1,1,1;0,0,0,0,-1,-1,-1,-1,-1,-1]; b1=[20,-16]; v1=[-inf,-inf, -inf, -inf,0,0,0,0,0,0]; v2=[inf, inf, inf, inf, 3,5,4,7,6,11]; opt1=optimset('largescale','off','MaxIter',1000,'MaxFun',20000); [x,fv,ef,out]=fmincon(@xuanzhifun1,x0,A1,b1,[],[],v1,v2,[],opt1)

输出结果如下: x= 3.2250 7.2500 5.6523 6.0000 0 fv= 82.8256 ef = 5 out = iterations: 35 funcCount: 439 7.2500 3.0000 0 4.0000 7.0000

lssteplength: 1 stepsize: 1.9703e-005 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: 4.8991 constrviolation: 0 message: [1x843 char] 总吨公里数为82.8256, 比程序改进前算出来的结果82.8559还要略小一些, 比用原临时 料场时的总吨公里数减小了53.3744。 另外,程序改进之后,迭代次数和目标函数调用次数均下降了许多,说明这个改进对问 题的解决有积极影响。

实验 9

【实验目的】

非线性规划

1. 了解非线性优化问题求解的基本思想,掌握用 MATLAB 优化工具箱解非线性规划的基本 方法; 2. 练习建立实际问题的非线性规划模型。 【实验内容】 【题目 3】 对问题

2 min{100(x2  x1 )2  (1  x1 )2  90(x 4  x3 )2  (1  x3 )2  10.1 1  x2 )2 [( 2

    (1  x 4 )2 ]  19.8 x 2  1)(x 4  1)}增加以下条件,并分别取初值(3, 1, 3, 1)和 (

(3, , , ),求解非线性规划: 131

(1)  10 

x i  10 ;

(2) 10  x i  10,x 1x 2  x 1  x 2  1.5  0,x 1x 2  10  0, 100  x 1x 2x 3x 4  100 ;  (3)  10  xi  10,x1x 2  x1  x 2  1.5  0,x1x 2  10  0,x1  x 2  0,x1x 2x3x 4  16 。 再试取不同的初值或用分析梯度计算,比较计算结果,你能从中得到什么启示? 1.1 目标函数的 M 文件的编写

2 设 f(x )  100(x2  x1 )2  (1  x1 )2  90 x 4  x3 )2  (1  x3 )2  10.1 1  x2 )2 ( [( 2

 (1  x 4 )2 ]  19.8 x 2  1)(x 4  1)}。 (

现在需要 f(x)的梯度,下面利用 matlab 里的 diff 命令求解梯度,建立文件 tidu.m

symsx1x2x3x4; z=100*(x2-x1^2)^2+(1-x1)^2+90*(x4-x3^2)^2+(1-x3)^2+10.1*((1-x2)^2+(1x4)^2)+19.8*(x2-1)*(x4-1); zx1=diff(z,x1);zx2=diff(z,x2);zx3=diff(z,x3);zx4=diff(z,x4); [zx1; zx2; zx3; zx4 ]

输出结果如下 ans = 2*x1 - 400*x1*(x2 - x1^2) - 2 - 200*x1^2 + (1101*x2)/5 + (99*x4)/5 - 40 2*x3 - 360*x3*(x4 - x3^2) - 2 - 180*x3^2 + (99*x2)/5 + (1001*x4)/5 - 40

由于可能用到黑塞矩阵,下面用 diff 命令求函数 f(x)的黑塞矩阵,建立文件 hessian.m

zx1x1=diff(zx1,x1);zx1x2=diff(zx1,x2);zx1x3=diff(zx1,x3);zx1x4=diff(z x1,x4); zx2x2=diff(zx2,x2);zx2x3=diff(zx2,x3);zx2x4=diff(zx2,x4); zx3x3=diff(zx3,x3);zx3x4=diff(zx3,x4); zx4x4=diff(zx4,x4); [zx1x1,zx1x2,zx1x3,zx1x4;zx1x2,zx2x2,zx2x3,zx2x4;zx1x3,zx2x3,zx3x3,zx 3x4;zx1x4,zx2x4,zx3x4,zx4x4;]

输出结果如下: ans = [ 1200*x1^2 - 400*x2 + 2, -400*x1, 0, 0] [ -400*x1, 1101/5, 0, 99/5] [ 0, 0, 1080*x3^2 - 360*x4 + 2, -360*x3] [ 0, 99/5, -360*x3, 1001/5] 下面编写目标函数的 M 文件 fun3.m:

f=100*(x(2)-x(1)^2)^2+(1-x(1))^2+90*(x(4)-x(3)^2)^2+(1-x(3))^2+10.1*( (1-x(2))^2+(1-x(4))^2)+19.8*(x(2)-1)*(x(4)-1); ifnargout>1 g(1)=2*x(1) - 400*x(1)*(x(2) - x(1)^2) - 2; g(2)=- 200*x(1)^2 + (1101*x(2))/5 + (99*x(4))/5 - 40 g(3)=2*x(3) - 360*x(3)*(x(4) - x(3)^2) - 2 g(4)=- 180*x(3)^2 + (99*x(2))/5 + (1001*x(4))/5 - 40 end ifnargout>2 H=[ 1200*x(1)^2 - 400*x(2) + 2, -400*x(1), -400*(x)1, 0, 0, end end 99/5, 1101/5, 0, -360*x3, 0, 99/5 1001/5]; 0

0, 1080*x3^2 - 360*x4 + 2, -360*x3

1.2 第一小问的求解 由于第一小问的约束条件只有上下限约束:  10  束的 M 文件。 又由于第一小问的约束条件只有上下限约束, 除了一般的中等规模算法之外, 还可使用 大规模算法。 下面利用 matlab 的 fmincon 命令

求解,分别使用中等规模的数值、分析算法以及大规 模的分析梯度算法求解。建立文件 fmincon31.m。

x0=[-3,-1,-3,-1];

x i  10 ,故无需编写非线性约

%中等规模算法(数值算法) opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); [x11,fv11,ef11,out11]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt1); %中等规模算法(分析算法) opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','DerivativeCheck','o n'); [x12,fv12,ef12,out12]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt2); %大规模算法(分析算法) opt1=optimset('largescale','on','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','Hessian','on','Deri vativeCheck','on'); [x13,fv13,ef13,out13]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10], [10,10,10,10],[],opt2); % results of solutions solutions=[x11;x12;x13]; funvalues=[fv11;fv12;fv13]; iterations=[out11.funcCount;out12.funcCount;out13.funcCount]; rr1=[solutions,funvalues,iterations]

按照上述以上程序,分别设置初值为[3,1,3,1],[-2,-2,-2,-2],[2,2,2,2],并将结果整理得 到如下表格: 初值 [-3,-1, -3,-1] [3,1, 3,1] [-2,-2, -2,-2] [2,2, 2,2] 算法 中等规模 大规模 中等规模 大规模 中等规模 大规模 中等规模 大规模 梯度 数值 分析 分析 数值 分析 分析 数值 分析 分析 数值 分析 分析 最优解 x1 1.0002 1.0002 0.9984 1.0001 1.0002 1.0011 1.0000 1.0000 0.9997 1.0001 1.0001 1.0010 最优解 X2 1.0004 1.0004 0.9968 1.0002 1.0004 1.0023 1.0000 1.0000 0.9995 1.0002 1.0002 1.0020 最优解 X3 0.9998 0.9998 1.0017 1.0000 0.9998 0.9987 1.0000 1.0000 1.0002 0.9999 0.9999 0.9990 最优解 X4 0.9996 0.9996 1.0034 1.0000 0.9997 0.9975 1.0000 1.0000 1.0003 0.9998 0.9998 0.9979 最优值 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0 0 0.0000 0.0000 0.0000 0.0000 目标函数 调用次数 136.0000 67.0000 204.0000 368.0000 160.0000 37.0000 12.0000 9.0000 302.0000 102.0000 54.0000 49.0000

对上表中的数据进行分析,可以得到以下结论: (1)使用中等规模算法时,若给出分析梯度,但是目标函数的调用次数会明显减少。

故对本问题,给出分析梯度对结果有积极影响。 (2)对于本题,初值取[-3,-1,-3,-1]和[-2,-2,-2,-2]时,使用中等规模算法的迭代次数和目 标函数使用次数明显小于使用大规模算法的,但是初值取[3,1,3,1]和[2,2,2,2]时,使用中等规 模算法的迭代次数和目标函数使用次数大于使用大规模算法的。 (3)对于本题,使用大规模算法得到的最优解和最优值均不如使用大规模算法得到的 结果好。 (4)对于本题,初值的改变并不影响最终的结果。 (5) 对第一小问,最优解为 x1= x2= x3= x4=1,最优值为 f(x)=0。 1.3 第二小问的求解 由于第二小问的约束条件不是线

性的,故需要编写约束函数的 M 文件。 1.3.1 非线性约束函数的 M 文件的编写 第二小文的非线性约束条件有:

x1x 2  x1  x 2  1.5  0,

x1x 2  10  0,

 100  x 1x 2x 3x 4  100

上下界约束条件有:

 10  x i  10,

编写如下文件 con32.m

function [c,ceq,g,geq]=con32(x) c=[x(1)*x(2)-x(1)-x(2)+1.5;-10-x(1)*x(2);x(1)*x(2)*x(3)*x(4)-100;-100 -x(1)*x(2)*x(3)*x(4)]; ceq=0; ifnargout>2 g=[x(2)-1,-x(2),x(2)*x(3)*x(4),-x(2)*x(3)*x(4);x(1)-1,-x(1),x(1)*x(3) *x(4),-x(1)*x(3)*x(4);0,0,x(1)*x(2)*x(4),-x(1)*x(2)*x(4);0,0,x(1)*x(2 )*x(3),-x(1)*x(2)*x(3)]; geq=[0;0;0;0]; end end

1.3.2 用 fmincon 命令求解 编写如下程序 fmincon32.m

x0=[-3,-1,-3,-1]; %-------------数值梯度------------opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); [x1,fv1,ef1,out1]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10,

10,10,10],@con32,opt1); [c11,c12]=con32(x); %--------------·分析梯度-------------opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000); opt2=optimset(opt1,'GradObj','on','GradCon','on','DerivativeCheck','o n'); [x2,fv2,ef2,out2]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10, 10,10,10],@con32,opt2); [c21,c22]=con32(x); %--------- results of solutions-------solutions=[x1;x2]; funvalues=[fv1;fv2]; iterations=[out1.funcCount;out2.funcCount]; rr1=[solutions,funvalues,iterations]

按照上述方法,将初值分别设为[3,1,3,1],[-2,-2,-2,-2],[2,2,2,2],并将输出结果进行整 理,得到如下表格: 初值 [-3,-1, -3,-1] [3,1, 3,1] [-2,-2, -2,-2] [2,2, 2,2] 梯度 数值 分析 数值 分析 数值 分析 数值 分析 最优解 x1 最优解 X2 最优解 X3 最优解 X4 最优值 目标函数 调用次数

1.4200 1.4200 1.4206 1.4206 1.4200 1.4200 -1.1082 -1.1082

-0.1904 -0.1904 -0.1888 -0.1888 -0.1904 -0.1904 1.2372 1.2372

1.4661 1.4661 -1.4394 -1.4394 1.4660 1.4660 0.8803 0.8803

2.1511 2.1511 2.0813 2.0813 2.1511 2.1511 0.7743 0.7742

487.9879 487.9879 493.7994 493.7994 487.9877 487.9876 4.4898 4.4898

97 52 111 60 164 96 282 122

通过对数据的分析,可以得到以下结论: (1)使用中等规模算法(SQP)时,若给出分析梯度,目标函数的调用次数会明显减 少。故对本问题,给出分析梯度对结果有积极影响。 (2)无论采用是不是分析梯度,得到的最优解和最优值都是一样的。 (3)对于本题,选择的初值不同,得到的结果也不同。 1.4 第三小问的求解 1.4.1 非线性约束函数的 M 文件的编写 第二小问的非线性约束条件有:

x1x 2  x1  x 2  1.5  0,

x1x 2  10  0,

x1x 2x 3x 4  16

上下界约束条件有:

 10  x i  10,

线性约束有:

x 1  x 2  0,

编写如下文件con33.m

function [c,ceq,g,geq]=con33(x) c=[x(1)*x(2)-x(1)-x(2)+1.5;-10-x(1)*x(2)]; ceq=x(1)*x(2)*x(3)*x(4)-16; ifnargout>2 g=[x(2)-1,-x(2);x(1)-1,-x(1);0,0;0,0]; geq=[x(2)*x(3)*x(4);x(1)*x(3)*x(4);x(1)*x(2)*

82.8559 ef = 5 out = iterations: 199 funcCount: 3552 lssteplength: 1 stepsize: 1.1586e-005 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: 13.5346 constrviolation: 3.3885e-020 message: [1x843 char] 将运行结果进行整理,得到如下表格:

工地(i) C12 C12

1 0 3

2 5 0

3 0 4

4 0 7

5 0 6

6 11 0

料场 (7.2500,7.2500) (3.3565, 5.6060)

总吨公里数为82.8559,比用原临时料场时的总吨公里数减小了53.3441。 2.4 程序改进 这个问题的等式约束简单,可以直接融入目标函数中去。 修改目标函数 M 文件如下。

function f=xuanzhifun1(x) f=x(5)*((x(1)-1.25)^2+(x(3)-1.25)^2)^0.5 ..., +x(6)*((x(1)-8.75)^2+(x(3)-0.75)^2)^0.5 ..., +x(7)*((x(1)-0.5)^2+(x(3)-4.75)^2)^0.5 ..., +x(8)*((x(1)-5.75)^2+(x(3)-5)^2)^0.5 ..., +x(9)*((x(1)-3)^2+(x(3)-6.5)^2)^0.5 ..., +x(10)*((x(1)-7.25)^2+(x(3)-7.25)^2)^0.5 ..., +(3-x(5))*((x(2)-1.25)^2+(x(4)-1.25)^2)^0.5 ..., +(5-x(6))*((x(2)-8.75)^2+(x(4)-0.75)^2)^0.5 ..., 21 +(4-x(7))*((x(2)-0.5)^2+(x(4)-4.75)^2)^0.5 ..., +(7-x(8))*((x(2)-5.75)^2+(x(4)-5)^2)^0.5 ..., +(6-x(9))*((x(2)-3)^2+(x(4)-6.5)^2)^0.5 ..., +(11-x(10))*((x(2)-7.25)^2+(x(4)-7.25)^2)^0.5; end

这样, 目标函数自变量的维数下降了不少, 可能对程序的运行和问题的解决有积极影响。 相应的,运行程序修改如下。

x0=[5,2,1,7,0,0,0,0,0,0]; A1=[0,0,0,0,1,1,1,1,1,1;0,0,0,0,-1,-1,-1,-1,-1,-1]; b1=[20,-16]; v1=[-inf,-inf, -inf, -inf,0,0,0,0,0,0]; v2=[inf, inf, inf, inf, 3,5,4,7,6,11]; opt1=optimset('largescale','off','MaxIter',1000,'MaxFun',20000); [x,fv,ef,out]=fmincon(@xuanzhifun1,x0,A1,b1,[],[],v1,v2,[],opt1)

输出结果如下: x= 3.2250 7.2500 5.6523 6.0000 0 fv= 82.8256 ef = 5 out = iterations: 35 funcCount: 439 7.2500 3.0000 0 4.0000 7.0000

lssteplength: 1 stepsize: 1.9703e-005 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: 4.8991 constrviolation: 0 message: [1x843 char] 总吨公里数为82.8256, 比程序改进前算出来的结果82.8559还要略小一些, 比用原临时 料场时的总吨公里数减小了53.3744。 另外,程序改进之后,迭代次数和目标函数调用次数均下降了许多,说明这个改进对问 题的解决有积极影响。


相关文章

  • 实验1 单纯形法求解线性规划
  • 实验1 单纯形法求解线性规划 专业班级 信息 学号 20102 姓名 报告日期 . 实验类型:●验证性实验 ○综合性实验 ○设计性实验 实验目的:进一步熟练掌握单纯形法求解线性规划. 实验内容:单纯形法求解线性规划4个(题目自选) 实验原理 ...查看


  • 管理运筹学实验报告2
  • 管理运筹学实验报告 班级: 姓名: 学号: 10级物流管理一班 高雪盛 电子商务与物流管理学院 二○一二年九月 实验二 一. 实验名称:线性规划问题的建模及求解⑴ 二. 实验目的: ⑴通过本实验使学生掌握建立线性优化模型的方法和工作步骤: ...查看


  • 运筹学上机实验报告
  • JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY <运筹学>上机实验报告 学 院: 计算机工程学院 专 业: 信息管理与信息系统 学 号: 10142131 学生姓名: 指导教师: 徐亚平 完成 ...查看


  • 一种基于核心矩阵的原始对偶算法
  • 第17卷第5期 运 筹 与 管 理 V01.17,No.5 2008年10月 OPERATIONSRESEARCHANDMANAGEMENTSCIENCE Oct.2008 一种基于核心矩阵的原始对偶算法 姜波, 蓝伯雄 (清华大学经济管理 ...查看


  • 运筹学实验报告 2
  • 运筹学实验报告 学院: 安全与环境工程 姓名: 许俊国 学号: 1350940219 专业: 物流工程 班级: 物流1302班 实验时间: 5月8日. 5月9日 5月13日.5月14日 5月20日.5月21日 湖南工学院安全与环境工程学院 ...查看


  • 交通运输规划与管理
  • 交通运输规划与管理 一.培养目标 较好地掌握马克思列宁主义.毛泽东思想的基本原理和邓小平理论:拥护党的基本路线,热爱祖国,遵纪守法,品德优良:具有艰苦奋斗的作风和求实创新.团结协作的精神:树立正确的世界观.人生观和价值观,德.智.体全面发展 ...查看


  • 散热片散热面积计算
  • 散热片作为强化传热的重要技术之一,广泛地应用于提高固体壁面的传热速率.比如飞机.空调.电子元件.机动车辆的散热器.船用散热器等[1].对散热片强化传热的研究引起国内外众多学者的关注,如对散热片自然对流的研究[2-7],对散热片强制对流的研究 ...查看


  • 线性与非线性规划问题求解
  • 线性与非线性规划问题求解 实验目的:学会用lindo 和lingo 软件求解线性和非线性规划,并作简单分析. 实验内容: 问题1:最佳连续投资方案 某部门在今后五年内考虑下列项目投资,已知 项目1 从第一年到第四年每年年初需要投资,并于次年 ...查看


  • 用几何画板进行数学研究性学习的三种方法
  • 目前,信息技术在数学教学中的应用开展得如火如荼,但是主要还停留在教师制作课件.学生接受学习的层面上,在运用信息技术开展高中数学研究性学习方面做得相对不足,其原因是一般的软件如PowerPoint ,Authorware .Flash .3D ...查看


热门内容