优化设计大作业参考答案优秀作品.docx
《优化设计大作业参考答案优秀作品.docx》由会员分享,可在线阅读,更多相关《优化设计大作业参考答案优秀作品.docx(20页珍藏版)》请在冰豆网上搜索。
![优化设计大作业参考答案优秀作品.docx](https://file1.bdocx.com/fileroot1/2023-1/10/5afb7751-44ec-4b6a-871d-6b4fc9ccd154/5afb7751-44ec-4b6a-871d-6b4fc9ccd1541.gif)
优化设计大作业参考答案优秀作品
结构优化设计课程
大作业
学生姓名
学号
任课教师
导师姓名
南京航空航天大学
2017年6月
第一部分基本知识作业
1.题3.21………………………………………………………………3
2.题4.73………………………………………………………………4
3.题5.24………………………………………………………………6
4.题8.37………………………………………………………………8
5.题8.51………………………………………………………………10
6.题11.24………………………………………………………………12
第二部分遗传算法
1.woodfunction函数…………………………………………………14
2.Powell奇异函数………………………………………………………17
3.Schaffer’s函数………………………………………………………18
第三部分附件
3.21Solvetherectangularbeamproblemofexercise2.17graphicallyforthefollowingdata.
解:
将exercize2.17中求梁横截面积最小值的问题用数学描述如下所示。
MinimizeS=bd
Subjectto
用Matlab作图可得如下所示。
图1:
题3.21示意图
从图中可以清楚地看到,在可行域内,最小值的所在点为(0.8,0.09375),最小值为0.075.
4.73Minimizef(x,y)=(x-8)2+(y-8)2;
Subjectto
解:
设
(u1,u2,u3,u4是拉格朗日乘子,s1,s2,s3,s4是松弛变量)
由KKT条件可得:
从其中的(a),(b),(c),(d)四项转换条件以下16种情况
Case1
U1=0,U2=0,U3=0,U4=0
Case2
U1=0,U2=0,U3=0,S4=0
Case3
U1=0,U2=0,S3=0,U4=0
Case4
U1=0,U2=0,S3=0,S4=0
Case5
U1=0,S2=0,U3=0,U4=0
Case6
U1=0,S2=0,U3=0,S4=0
Case7
U1=0,S2=0,S3=0,U4=0
Case8
U1=0,S2=0,S3=0,S4=0
Case9
S1=0,U2=0,U3=0,U4=0
Case10
S1=0,U2=0,U3=0,S4=0
Case11
S1=0,U2=0,S3=0,U4=0
Case12
S1=0,U2=0,S3=0,S4=0
Case13
S1=0,S2=0,U3=0,U4=0
Case14
S1=0,S2=0,U3=0,S4=0
Case15
S1=0,S2=0,S3=0,U4=0
Case16
S1=0,S2=0,S3=0,S4=0
依次求解各种情况,并进行比较可得,在case12这种情况可得最优点(6,6),最小值为8;如下图
(2)所示。
图2:
题4.73题示意图
5.24Minimize
Subjectto
解:
设
由第二种KKT条件可得:
由KKT条件中的转换条件(a)可得:
Case1:
U1=0
由此可得:
X1=1,X2=1,g1=-2
Case2:
g1=0
由此可得:
X1=0,X2=0,U1=-2
因为KKT条件要求拉格朗日乘子U需要大于0,所以case2不满足KKT条件。
由于在(1,1)这点没有激活条件,所以这一点是regularpoint.
通过计算可得海森矩阵为
,此矩阵为正定矩阵,满足StrongSufficentCondtion.
综上可见,(1,1)点为最优点,最小值为0.如下图所示。
图3:
题5.24示意图
8.37Minimize
Subjiectto
解:
引入松弛变量学,X3,X4,将问题转化为标准线性规划问题。
Minimize
Subjectto
创建单纯性法表格,利用单纯性法解决该线性规划问题。
Basic↓
X1
X2
X3
X4
b
Ratio
1.X3
-1
2
1
0
10
5
2.X4
3
2
0
1
18
9
3.Cost
2
-1
0
0
f
从初始的单纯性表,我们可以得到如下可行解
BasicvariablesX3=10,X4=18
NonbasicvariablesX1=0,X2=0
Costfunctiomf=0;
从初始单纯性表可以看出,最后一行存在系数为负数,所以上述可行解不是最优解,我们选择非基本变量X2替代基本变量X3.于是我们可以得到下表。
Basic↓
X1
X2
X3
X4
b
Ratio
1.X2
-0.5
1
0.5
0
5
2.X4
4
0
-1
1
8
3.Cost
1.5
0
0.5
0
f+5
从上述单纯性表中,我们可以得到如下可行解
BasicvariablesX2=5,X4=8
NonbasicvariablesX1=0,X3=0
Costfunctiomf=-5;
从初始单纯性表可以看出,最后一行存在系数为全为正数,所以上述可行解是最优解,如下图所示。
图4:
题8.37示意图
8.51Minimize
Subjectto
解:
引入松弛变量将此问题转换为标准线性规划问题。
Minimize
Subjectto
创建单纯性表格,利用单纯性法解决问题
Basic
X1
X2
X3
X4
X5
b
Ratio
1.X3
2
1
1
0
0
5
2.5
2.X4
3
4
0
1
0
10
3.33
3.X5
1
0
0
0
1
3
3
Cost
-2
-1
0
0
0
f
从初始单纯性表可以得到如下可行解。
BasicvaluablesX3=5,X4=10,X5=3,
NonbasicvaluablesX1=0,X2=0
Costfunctionf=0;
从初始表格可以看出,最后一行中存在系数为负数,所以上述解并不为最优解。
现将基本变量X3与非基本变量X1替换。
可得下表
Basic
X1
X2
X3
X4
X5
b
Ratio
1.X1
1
0.5
0.5
0
0
2.5
2.X4
0
2.5
-1.5
1
0
2.5
3.X5
0
-0.5
-0.5
0
1
0.5
Cost
02
0
1
0
0
f+5
从上表可以得到下述可行解:
BasicvaluablesX1=2.5,X4=2.5,X5=0.5;
NonbasicvaluablesX2=0,X3=0;
Costfunctionf=-5;
从上表中可以看出,最后一行系数全为正数,所以此解即为最优解。
如下图所示。
图5:
题8.51示意图
11.42f(X1,X2,X3,X4)=(X1-10X2)2+5(X3-X4)2+(X2-2X3)4+10(X1-X4)4,
Letthestartingdesignbe(1,2,3,4);
解:
本题采用牛顿法进行迭代求解。
牛顿法的基本思路如下所示
1.选定初始点,确定准许的误差,令K=0;
2.求
,检验
,如果其大小误差,否则进入第(3)步。
3.令Sk=
,XK+1=XK+SK.转回第二步。
根据此思想,编程如下
clc;
clear;
%定义函数
symsx1x2x3x4;
f=(x1-10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
%定义初始点
x0=[1;2;3;4];
%求函数的梯度和海森矩阵
g=jacobian(f,[x1;x2;x3;x4]);
G=jacobian([g
(1);g
(2);g(3);g(4)],[x1,x2,x3,x4]);
%计算初值
g0=subs(g,[x1,x2,x3,x4],[x0
(1),x0
(2),x0(3),x0(4)]);
G0=subs(G,{x1,x2,x3,x4},{x0
(1),x0
(2),x0(3),x0(4)});
f0=subs(f,[x1,x2,x3,x4],[x0
(1),x0
(2),x0(3),x0(4)]);
%定义迭代最大次数
n=10;
%定义迭代点集合,以及初始化
X=zeros(4,n);
F=zeros(1,n);
X(:
1)=x0-inv(G0)*g0';
A=X(:
1);
F
(1)=subs(f,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
%定义精度
q=0;
data=10;
i=1;
while(data>=q&i<10)
A=X(:
i);
gi=subs(g,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
Gi=subs(G,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
i=i+1;
X(:
i)=X(:
i-1)-inv(Gi)*gi';
A=X(:
i);
F(i)=subs(f,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
data=abs(F(i)-F(i-1));
end
X
F
data
运行程序得到如下结果:
迭代10次,每次所在点如下图
每次迭代所得结果为:
2遗传算法
遗传算法是一种寻求函数最优解的算法。
其基本原理是:
模拟自然界生物繁衍过程中基因重组与自然进化的过程。
把待解决问题的参数编程二进制码或十进制码(即基因),若干基因组成一个染色体(即个体),许多染色体进行类似于自然选择,配对交叉和变异的运算,经过多次迭代,直至得到最优结果。
其算法思路如下所示。
图6:
遗传算法思路
遗传算法具体实现通过Matlab自带函数ga实现的,对该函数的用法这里不再细述,进队我们使用的参数进行说明。
2.1woodfunction函数
解:
1.首先编辑函数文件,定义为Problem1,具体如下所示。
functionfitness=problem1(x)
fitness=100*(x
(1)^2-x
(2))+(x
(1)-1)^2+(x(3)-1)^2+...
90*(x(3)^2-x(4))^2+10.1*((x
(2)-1)^2+(x(4)-1)^2)+...
19.8*(x
(2)-1)*(x(4)-1);
End
2.设置ga函数参数,并调用ga函数求解。
具体代码如下.
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem1,4,[],[],[],[],[],[],[],options);
3.ga函数的重要参数,以及运算结果。
Ga函数的重要参数,即遗传算法的基本参数如下表所示。
属性名
说明
取值
PopolationSize
表示个体数目的数值
20
Elitecount
不变化的下一代最优个体数目
2
CrossoverFraction
个体间交换基因的比例
0.8
Generations
允许代的最大数目
60
TolFun
约束的终止容限
1e-6
运行结如下图所示。
图7:
遗传算法每次迭代最佳适应度函数值
图8:
遗传算法的运行信息
由上可知,总共迭代52次,最优个体为(0.0587,7.4164,0.0337,-0.4795),函数最优值为-468.7200.
2.2Powell奇异函数:
解:
1.首先编辑函数文件,定义为Problem1,具体如下所示。
functionf=problem2(x)
f=(x
(1)+10*x
(2))^2+5*(x(3)-x(4))^2+(x
(2)-2*x(3))^4+10*(x
(1)-x(4))^4;
End
2.设置ga函数参数,并调用ga函数求解。
具体代码如下.
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem2,4,[],[],[],[],[],[],[],options);
4.ga函数的重要参数,以及运算结果。
Ga函数的各个参数同上,这里不再赘述。
运行结如下图所示。
图9:
遗传算法每次迭代最佳适应度函数值
图10:
遗传算法的运行信息
由上可知,总共迭代57次,最优个体为(-0.1126,0.0139,-0.0157,-0,0146),函数最优值为.0.0132
2.3Schaffer’s函数
解:
1.首先编辑函数文件,定义为Problem1,具体如下所示。
functionf=problem3(x)
f=0.5-(sin(sqrt(x
(1)^2+x
(2)^2))*sin(sqrt(x
(1)^2+x
(2)^2))-0.5)/(1+0.001*(x
(1)^2+x
(2)^2))^2;
end
2.设置ga函数参数,并调用ga函数求解。
具体代码如下.
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem3,2,[],[],[],[],[-100;-100],[100;100],[],options);
3.ga函数的重要参数,以及运算结果。
Ga函数的各个参数同上,这里不再赘述。
运行结如下图所示。
图11:
遗传算法每次迭代最佳适应度函数值
图12:
遗传算法的运行信息
由上可知,总共迭代51次,最优个体为(1.1213,1.0978),函数最优值为0.0025.
3.附件
3.1题3.21的相关matlab程序
clc;
clear;
d=0.1:
0.01:
2;
b1=0.06./(d.^2);
plot(d,b1,'k');
holdon
b2=0.075./d;
plot(d,b2,'k');
holdon;
%g=@(x,y)x.*y;
%ezcontour(@(x,y)g(x,y),[0.05,1])
fori=0.05:
0.25:
1
bi=i./d;
plot(d,bi,'b-')
holdon
end
xlim([0,1]);
ylim([0,1]);
plot(0.8,0.09375,'k*');
fill([0.245,0.8,1,1],[1,0.09375,0.075,1],[1,0.5,0.5],'FaceAlpha',0.5);
gtext('0.05');
gtext('0.075');
gtext('0.3');
gtext('0.55');
3.2题11.42的相关程序(牛顿法)
clc;
clear;
%定义函数
symsx1x2x3x4;
f=(x1-10*x2)^2+5*(x3-x4)^2+(x2-2*x3)^4+10*(x1-x4)^4;
%定义初始点
x0=[1;2;3;4];
%求函数的梯度和海森矩阵
g=jacobian(f,[x1;x2;x3;x4]);
G=jacobian([g
(1);g
(2);g(3);g(4)],[x1,x2,x3,x4]);
%计算初值
g0=subs(g,[x1,x2,x3,x4],[x0
(1),x0
(2),x0(3),x0(4)]);
G0=subs(G,{x1,x2,x3,x4},{x0
(1),x0
(2),x0(3),x0(4)});
f0=subs(f,[x1,x2,x3,x4],[x0
(1),x0
(2),x0(3),x0(4)]);
%定义迭代最大次数
n=10;
%定义迭代点集合,以及初始化
X=zeros(4,n);
F=zeros(1,n);
X(:
1)=x0-inv(G0)*g0';
A=X(:
1);
F
(1)=subs(f,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
%定义精度
q=0;
data=10;
i=1;
while(data>=q&i<10)
A=X(:
i);
gi=subs(g,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
Gi=subs(G,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
i=i+1;
X(:
i)=X(:
i-1)-inv(Gi)*gi';
A=X(:
i);
F(i)=subs(f,[x1,x2,x3,x4],[A
(1),A
(2),A(3),A(4)]);
data=abs(F(i)-F(i-1));
end
X
F
Data
3.3woodfunction函数的相关matlab程序(遗传算法)
3.3.1woodfunction函数的编译程序
functionfitness=problem1(x)
fitness=100*(x
(1)^2-x
(2))+(x
(1)-1)^2+(x(3)-1)^2+...
90*(x(3)^2-x(4))^2+10.1*((x
(2)-1)^2+(x(4)-1)^2)+...
19.8*(x
(2)-1)*(x(4)-1);
End
3.3.2遗传算法的实现程序
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem1,4,[],[],[],[],[],[],[],options);
3.4powell奇异函数的相关matlab程序(遗传算法)
3.4.1woodfunction函数的编译程序
functionf=problem2(x)
f=(x
(1)+10*x
(2))^2+5*(x(3)-x(4))^2+(x
(2)-2*x(3))^4+10*(x
(1)-x(4))^4;
End
3.4.2遗传算法的实现程序
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem2,4,[],[],[],[],[],[],[],options);
3.5schaffer’s函数的相关matlab程序(遗传算法)
3.5.1schaffer’s函数的编译程序
functionf=problem3(x)
f=0.5-(sin(sqrt(x
(1)^2+x
(2)^2))*sin(sqrt(x
(1)^2+x
(2)^2))-0.5)/(1+0.001*(x
(1)^2+x
(2)^2))^2;
end
3.5.2遗传算法的实现程序
clc;
clear;
options=gaoptimset('PlotFcns',@gaplotbestf,'Generations',60);
[x,fval,exitflag,output]=ga(@problem3,2,[],[],[],[],[-100;-100],[100;100],[],options);