实验9非线性规划.docx
- 文档编号:4287455
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:15
- 大小:78.85KB
实验9非线性规划.docx
《实验9非线性规划.docx》由会员分享,可在线阅读,更多相关《实验9非线性规划.docx(15页珍藏版)》请在冰豆网上搜索。
实验9非线性规划
实验9非线性规划
【实验目的】
1.了解非线性优化问题求解的基本思想,掌握用MATLAB优化工具箱解非线性规划的基本方法;
2.练习建立实际问题的非线性规划模型。
【实验内容】
【题目3】
对问题
增加以下条件,并分别取初值
和
,求解非线性规划:
(1)
;
(2)
;
(3)
。
再试取不同的初值或用分析梯度计算,比较计算结果,你能从中得到什么启示?
1.1目标函数的M文件的编写
设
。
现在需要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+(1-x4)^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(zx1,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,zx3x4;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),0,0
-400*(x)1,1101/5,0,99/5
0,0,1080*x3^2-360*x4+2,-360*x3
0,99/5,-360*x3,1001/5];
end
end
1.2第一小问的求解
由于第一小问的约束条件只有上下限约束:
,故无需编写非线性约束的M文件。
又由于第一小问的约束条件只有上下限约束,除了一般的中等规模算法之外,还可使用大规模算法。
下面利用matlab的fmincon命令求解,分别使用中等规模的数值、分析算法以及大规模的分析梯度算法求解。
建立文件fmincon31.m。
x0=[-3,-1,-3,-1];
%中等规模算法(数值算法)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','on');
[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','DerivativeCheck','on');
[x13,fv13,ef13,out13]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10,10,10,10],[],opt2);
%resultsofsolutions
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],并将结果整理得到如下表格:
初值
算法
梯度
最优解x1
最优解X2
最优解X3
最优解X4
最优值
目标函数调用次数
[-3,-1,
-3,-1]
中等规模
数值
1.0002
1.0004
0.9998
0.9996
0.0000
136.0000
分析
1.0002
1.0004
0.9998
0.9996
0.0000
67.0000
大规模
分析
0.9984
0.9968
1.0017
1.0034
0.0000
204.0000
[3,1,
3,1]
中等规模
数值
1.0001
1.0002
1.0000
1.0000
0.0000
368.0000
分析
1.0002
1.0004
0.9998
0.9997
0.0000
160.0000
大规模
分析
1.0011
1.0023
0.9987
0.9975
0.0000
37.0000
[-2,-2,
-2,-2]
中等规模
数值
1.0000
1.0000
1.0000
1.0000
0
12.0000
分析
1.0000
1.0000
1.0000
1.0000
0
9.0000
大规模
分析
0.9997
0.9995
1.0002
1.0003
0.0000
302.0000
[2,2,
2,2]
中等规模
数值
1.0001
1.0002
0.9999
0.9998
0.0000
102.0000
分析
1.0001
1.0002
0.9999
0.9998
0.0000
54.0000
大规模
分析
1.0010
1.0020
0.9990
0.9979
0.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文件的编写
第二小文的非线性约束条件有:
上下界约束条件有:
编写如下文件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','on');
[x2,fv2,ef2,out2]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10,10,10,10],@con32,opt2);
[c21,c22]=con32(x);
%---------resultsofsolutions--------
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],并将输出结果进行整理,得到如下表格:
初值
梯度
最优解x1
最优解X2
最优解X3
最优解X4
最优值
目标函数调用次数
[-3,-1,
-3,-1]
数值
1.4200
-0.1904
1.4661
2.1511
487.9879
97
分析
1.4200
-0.1904
1.4661
2.1511
487.9879
52
[3,1,
3,1]
数值
1.4206
-0.1888
-1.4394
2.0813
493.7994
111
分析
1.4206
-0.1888
-1.4394
2.0813
493.7994
60
[-2,-2,
-2,-2]
数值
1.4200
-0.1904
1.4660
2.1511
487.9877
164
分析
1.4200
-0.1904
1.4660
2.1511
487.9876
96
[2,2,
2,2]
数值
-1.1082
1.2372
0.8803
0.7743
4.4898
282
分析
-1.1082
1.2372
0.8803
0.7742
4.4898
122
通过对数据的分析,可以得到以下结论:
(1)使用中等规模算法(SQP)时,若给出分析梯度,目标函数的调用次数会明显减少。
故对本问题,给出分析梯度对结果有积极影响。
(2)无论采用是不是分析梯度,得到的最优解和最优值都是一样的。
(3)对于本题,选择的初值不同,得到的结果也不同。
1.4第三小问的求解
1.4.1非线性约束函数的M文件的编写
第二小问的非线性约束条件有:
上下界约束条件有:
线性约束有:
编写如下文件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)*x(4);x
(1)*x
(2)*x(3)];
end
end
1.4.2用fmincon命令求解
编写如下程序fmincon33.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],@con33,opt1);
[c11,c12]=con32(x);
%--------------•分析梯度---------------
opt1=optimset('largescale','off','MaxIter',3000,'MaxFun',20000);
opt2=optimset(opt1,'GradObj','on','GradCon','on','DerivativeCheck','on');
[x2,fv2,ef2,out2]=fmincon(@fun3,x0,[],[],[],[],[-10,-10,-10,-10],[10,10,10,10],@con33,opt2);
[c21,c22]=con32(x);
%---------resultsofsolutions--------
solutions=[x1;x2];
funvalues=[fv1;fv2];
iterations=[out1.funcCount;out2.funcCount];
rr1=[solutions,funvalues,iterations]
按照上述方法,把初值分别设为[3,1,3,1],[-1,1,-1,1],[1,1,1,1],并将输出结果进行整理,得到如下表格:
初值
梯度
最优解x1
最优解x2
最优解x3
最优解x4
最优值
调用次数
(-3,-1,3,-1)
数值
1.7748
-1.7748
1.4276
-3.5582
5782.6
77
分析
1.7748
-1.7748
1.4276
-3.5582
5782.6
41
(3,1,3,1)
数值
-2.2377
2.2377
1.1946
-2.6747
2353.7
66
分析
-2.2377
2.2377
1.1946
-2.6747
2353.7
33
(1,1,1,1)
数值
0.2888
0.2937
9.8720
9.8720
691163
----
分析
1
1
1
1
0
5
(-1,1,-1,1)
数值
-1.3982
1.3982
-2.0350
4.0218
164.90
68
分析
-1.3982
1.3982
-2.0350
4.0218
164.90
35
通过对数据的分析,可以得到以下结论:
除选择初值点为[1,1,1,1]外,
(1)使用中等规模算法(SQP)时,若给出分析梯度,目标函数的调用次数会明显减少。
故对本问题,给出分析梯度对结果有积极影响。
(2)无论采用是不是分析梯度,得到的最优解和最优值都是一样的。
【题目2】
某公司有6个建筑工地要开工,每个工地的位置(用平面坐标
,
表示,距离单位:
km)及水泥日用量
(t)由下表给出。
现在要修建两个临时料场A、B,日储量各有20t。
假设从料场到工地之间均有直线道路相连,问临时料场应建在何处,每天分别向各工地运送多少吨水泥,才可以使总的吨公里数最小?
工地
1
2
3
4
5
6
1.25
8.75
0.5
5.75
3
7.25
1.25
0.75
4.75
5
6.5
7.75
3
5
4
7
6
11
2.1模型建立
设工地的位置为
,水泥日用量为
,
;料场位置为
,
(分别表示A,B);从料场
向工地
的运送量为
,优化问题可以表示为
约束条件:
1、两个料场向某个工地运送的水泥量之和等于该工地的水泥日需量:
2、某个料场运送给所有工地的水泥量之和小于等于日储备量20吨:
3、运送水泥量的非负约束:
2.2目标函数M文件的编写
由于目标函数变量很多,求解过程中若要采用分析梯度就十分繁琐,故求解过程中只用数值梯度,这里也不再求目标函数的梯度和海森矩阵了。
functionf=xuanzhifun(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...,
+x(11)*((x
(2)-1.25)^2+(x(4)-1.25)^2)^0.5...,
+x(12)*((x
(2)-8.75)^2+(x(4)-0.75)^2)^0.5...,
+x(13)*((x
(2)-0.5)^2+(x(4)-4.75)^2)^0.5...,
+x(14)*((x
(2)-5.75)^2+(x(4)-5)^2)^0.5...,
+x(15)*((x
(2)-3)^2+(x(4)-6.5)^2)^0.5...,
+x(16)*((x
(2)-7.25)^2+(x(4)-7.25)^2)^0.5;
End
由于约束条件全部都是线性的,故不需要编写非线性约束函数的M文件。
2.3用fmincon命令求解
2.3.1初值的选取
目标函数有四个变量(x,y,c1,c2)。
在M文件中,上述四个变量和函数变量x的关系如下表所示。
X(1,2)
Y(1,2)
c1(1~6)
c2(1~6)
x(1,2)
x(3,4)
x(5~10)
x(11~16)
x,y表示新建料场的位置,初值可选取原来料场的位置,故x0=[5,2],y0=[1,7]。
c1,c2分别表示从L1和L2向各个工地运送的水泥量,初值可选为0,c1=c2=[0,0,0,0,0,0]。
故x=[5,2,1,7,0,0,0,0,0,0,0,0,0,0,0,0]
2.3.2fmincon命令中各个约束参量的确定
1、线性不等式约束
故
A1=[0,0,0,0,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]
b1=[20,20]
2、线性等式约束
故
A2=[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,0,0,0,0,0,0,1,0,0,0,0,0,1]
b2=[3,5,4,7,6,11]
3、非负约束
v1=[-Inf,-Inf,-Inf,-Inf,0,0,0,0,0,0,0,0,0,0,0,0]
v2=[Inf,Inf,Inf,Inf,20,20,20,20,20,20,20,20,20,20,20,20]
2.3.3编写程序求解
x0=[5,2,1,7,0,0,0,0,0,0,0,0,0,0,0,0];
A1=[0,0,0,0,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];
b1=[20,20];
A2=[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,0,0,0,0,0,0,1,0,0,0,0,0,1];
b2=[3,5,4,7,6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验9 非线性规划 实验 非线性 规划