实验9非线性规划.docx

上传人:b****6 文档编号:4287455 上传时间:2022-11-28 格式:DOCX 页数:15 大小:78.85KB
下载 相关 举报
实验9非线性规划.docx_第1页
第1页 / 共15页
实验9非线性规划.docx_第2页
第2页 / 共15页
实验9非线性规划.docx_第3页
第3页 / 共15页
实验9非线性规划.docx_第4页
第4页 / 共15页
实验9非线性规划.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验9非线性规划.docx

《实验9非线性规划.docx》由会员分享,可在线阅读,更多相关《实验9非线性规划.docx(15页珍藏版)》请在冰豆网上搜索。

实验9非线性规划.docx

实验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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1