机械优化设计鲍威尔法Word文档格式.docx
- 文档编号:19172185
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:75.73KB
机械优化设计鲍威尔法Word文档格式.docx
《机械优化设计鲍威尔法Word文档格式.docx》由会员分享,可在线阅读,更多相关《机械优化设计鲍威尔法Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
在改进的算法中首先判断原向量组是否需要替换。
如果需要替换,还要进一步判断原向量组中哪个向量最坏,然后再用新产生的向量替换这个最坏的向量,以保证逐次生成共轭方向。
为此,要解决两个关键问题:
k,1是否较好,是否应该进入新的方向组,即方向组是否进行更新,
(1)d
kk,1
(2)如果应该更新方向组,不一定替换方向,而是有选择地替换某一方向dd1
k。
dm
改进算法的具体步骤:
000
(1)给定初始点(记作),选取初始方向组,它由n个线性无关的向量,xdx0100,...,所组成,置。
ddk,02n
kkkkkkk
(2)从出发,顺次沿,,...,作一维搜索得,,...,。
接xdddxxxn012n12
kkkk着以为起点,沿方向xd,x,xnn,1n0
kkkkkkkk移动一个的距离,得到x,xx,x,(x,x),2x,xn0n,1nn0n0kkk、、分别称为一轮迭代的始点、终点和反射点。
始点、终点和反射点所对应xxx0nn,1
的函数值分别为:
kF,f(x)00
kF,f(x)2n
kF,f(x)3n,1
k同时计算各中间点的函数值,并记为:
f,f(x)(i=1,2,...,n)ii
因此有F,f,F,f002n
计算n个函数值之差f,f,f,f,...,f,f。
0112n,1n
,f,f记作:
(i=1,2,...,n)ii,1i
其中最大者记作:
,,,f,fmaxmim,1m1,i,n
F,F(3)根据是否满足判断条件和30
22(F,2F,F)(F,F,,),0.5,(F,F),来确定是否要对原方向组进行02302mm03
替换。
kk若不满足判别条件,则下轮迭代仍使用原方向组,并以x、x中函数值小者作为nn,1下轮迭代的始点。
kd若满足上述判别条件,则下轮迭代应对原方向组进行替换,将补充到原方向组n,1
kkkkkkkdd,d,...,d,d,...,d,d的最后位置,而除掉。
即新方向组为作为下轮迭代m12m,1m,1nn,1
kk,1dx的搜索方向。
下轮迭代的始点取为沿方向进行一维搜索的极小点。
n,10
k,1x(4)判断是否满足收敛准则。
若满足则取为极小点,否则应置,k,k,10
返回2,继续进行下一轮迭代。
这样重复迭代的结果,后面加进去的向量都彼此对G共轭,经n轮迭代即可得到一个由n个共轭方向所组成的方向组。
对于二次函数,最多n次就可找到极小点,而对一般函数,往往要超过n次才能找到极小点(这里“n”表示设计空间的维数)。
图2.鲍威尔法的程序框图
22f(xx),x,2x,4x,2xx题目:
用改进的鲍威尔法求目标函数的最优1212112解。
已知初始点[1,1]T,迭代精度。
,0.001
0100解:
初始点,初始搜索方向,。
初始点处的函数值x,[]d,e,[]01221
0F,f,f(x),,3000。
第一轮迭代:
0方向进行一维搜索,得:
1)沿d1
1,,000111x,x,,d,[],,[],[]10111101为一维搜索最佳步长,应满足极值必要条件:
1
0002f(x),f[x,,d],[,,4,,3]minmin1011,,
,(,)min,
'
(,),2,,4,01
所以算出一维搜索最佳步长,,21
03x,[]得11
00从而算出x点处的函数值及沿d走步后函数值的增量11
0f,f(x),,711
,f,f,4101
0d2)再沿方向进行一维搜索,得2
000303x,x,,d,[],,[],[]21221211,,2
为一维搜索最佳步长,应满足极值必要条件:
2
0002f(x),f[x,,d],[2,,2,,7]minmin2122,,
,(,)min,
(,),4,,2,02
,0.5所以算出一维搜索最佳步长2
03x,[]得21.5
00xd从而算出第一轮终点处的函数值及沿走步后函数值的增量22
0f,f(x),,7.522
,f,f,0.5212
00dd取沿,走步后函数值增量中最大者12
,max[,,,],4m12
0终点的反射点及其函数值为x2
000315x,2x,x,2[],[],[]3201.512
0F,f(x),,733
3)为确定下一轮迭代的搜索方向和起始点,需检查判别条件
22和是否满足。
(F,2F,F)(F,F,,),0.5,(F,F)F,F02302mm0330由于满足Powell条件,则淘汰函数值下降量最大的方向e,下一轮的基本方向组为1
0e,d。
23
000312构成新的方向d,x,x,[],[],[]3201.510.5
00此点d为补充到原方程组的点,沿d方向一维搜索得极小点和极小值:
33
13.81x,[],f(x),,7.91.7
1此点为下一轮迭代初始点,按点距准则检验终止条件x
1122x,x,(3.8,1),(1.7,1),2.886,,0
需进行第二轮迭代机算。
第二轮迭代:
01111edddx,x此轮基本方向组为,,分别相当于,,起始点为。
23120
e1)沿方向进行一维搜索得,过程同上,得:
13.81x,[],f(x),,7.9811.91
10xd2)以为起点,沿方向一维搜索得:
13
13.961x,[],f(x),,7.99621.92
确定此轮中函数值最大下降量及其相应方向
,0.08,,0.016,12
0ed取沿,走步后函数值增量中最大者23
,max[,,,],0.08m12
1x终点的反射点及其函数值为2
1113.963.84.12x,2x,x,2[],[],[]3201.941.72.18
1F,f(x),,7.96433
0ed检验Powell条件,淘汰函数值下降量最大的方向,下一轮的基本方向组应为,32
1。
d3
1113.963.80.16构成新的方向d,x,x,[],[],[]3201.941.70.24
11此点d为补充到原方程组的点,沿d方向一维搜索得极小点和极小值:
242x,[],f(x),,82
2此点为下一轮迭代初始点,按点距准则检验终止条件x
2222x,x,(4,3.8),(2,1.7),0.36,,0
需进行第三轮迭代机算。
第三轮迭代:
012012此轮基本方向组为d,d,起始点为x,,先后沿d,d,方向,进x33033
行一维搜索,得
2424x,[],x,[]1222
22x,x,0,,检验终止条件:
20
*4*x,[],f(x),,8故最优解:
12实际上,前两轮迭代的d,d为共轭方向,由于本例目标函数是二次函数,按33
共轭方向的二次收敛性,故前两轮的结果就是问题的最优解,但每一轮迭代都需要进行
n+1次迭代。
图3.迭代过程图
附录:
#include<
stdio.h>
math.h>
stdlib.h>
#definem5/*数组长度m>
=维数n*/
floatf(floatx[]);
voidmjtf(intn,floatx0[],floath,floats[],floata[],floatb[]);
voidgold(intn,floata[],floatb[],floatflag,floatx[]);
voidmbwef(intn,floatx0[],floath,floatflag,floata[],floatb[],floatx[]);
/*目标函数(n维)*/
/*入口参数:
x:
n维数组,自变量*/
/*返回值:
函数值*/
floatf(floatx[])
{
floatresult;
result=x[0]*x[0]+2*x[1]*x[1]-4*x[0]-2*x[0]*x[1];
returnresult;
}
/*外推法子程序*/
n:
优化模型维数
x0:
n维数组,初始点坐标
h:
初始搜索步长
s:
n维数组,搜索方向*/出口参数:
/*
a:
n维数组,搜索区间下限
b:
n维数组,搜索区间上限*/voidmjtf(intn,floatx0[],floath,floats[],floata[],floatb[])
inti;
floatx1[m],x2[m],x3[m],f1,f2,f3;
for(i=0;
i<
n;
i++)/*计算初始两试点*/
x1[i]=x0[i];
x2[i]=x0[i]+h*s[i];
f1=f(x1);
f2=f(x2);
if(f2>
=f1)/*判断搜索方向*/{/*搜索方向为反向,转身*/
h=(-1)*h;
i++)
x3[i]=x1[i];
f3=f1;
x1[i]=x2[i];
f1=f2;
x2[i]=x3[i];
f2=f3;
}/*搜索方向为正向*/
i++)/*计算第三试点*/
x3[i]=x2[i]+h*s[i];
f3=f(x3);
while(f3<
f2)/*判断是否未完成搜索*/
{/*未完成,继续搜索*/
h=2*h;
}/*已完成*/
i++)/*输出初始搜索区间*/{
if(h>
0)
a[i]=x1[i];
b[i]=x3[i];
else
a[i]=x3[i];
b[i]=x1[i];
/*黄金分割法子程序*/
入口参数:
n维数组,搜索区间上限
flag:
迭代精度*//*出口参数:
n维数组,极小点坐标*/voidgold(intn,floata[],floatb[],floatflag,floatx[])
floatx1[m],x2[m],f1,f2,sum;
x1[i]=b[i]-(float)0.618*(b[i]-a[i]);
x2[i]=a[i]+(float)0.618*(b[i]-a[i]);
do
if(f1<
=f2)/*判断消去区间*/
{/*消去右区间*/
b[i]=x2[i];
x2[i]=x1[i];
f2=f1;
{/*消去左区间*/
sum=0;
sum+=(b[i]-a[i])*(b[i]-a[i]);
}while(sqrt(sum)>
flag*0.1);
/*判断是否未达到精度要求,若未达到
则返回继续缩小区间*/
x[i]=(float)0.5*(b[i]+a[i]);
/*已达到,输出极小点*/
/*鲍威尔法子程序*/
迭代精度
n维数组,搜索区间上限*/
/*出口参数:
n维数组,极小点坐标*/
voidmbwef(intn,floatx0[],floath,floatflag,floata[],floatb[],floatx[])
inti,j,k,r;
floatx1[m],x2[m],f0,f1,f2,fn[m],s[m][m],sum;
i++)/*方向矩阵初始化*/
for(k=0;
k<
k++)/*初始搜索方向确定*/
if(i==k)
s[i][k]=1;
s[i][k]=0;
k=1;
while
(1)
i++)/*依次按每个方向搜索*/
mjtf(n,x1,h,s[i],a,b);
/*调用外推法子程序*/
gold(n,a,b,flag,x1);
/*调用黄金分割法子程序*/
fn[i]=f(x0)-f(x1);
/*计算函数下降值*/
i++)/*计算映射点*/
x2[i]=2*x1[i]-x0[i];
for(i=1;
i++)/*找出函数下降值中的最大值存入fn[0]*/
if(fn[0]<
fn[i])
fn[0]=fn[i];
r=i;
/*搜索方向累加*/
r=0;
f0=f(x0);
/*计算始点、终点和映射点的函数值*/
=f0||(f0-2*f1+f2)*(f0-f1-fn[0])*(f0-f1-fn[0])>
=0.5*fn[0]*(f0-f2)*(f0-
f2)){/*判断是否需要换方向*//*不需要换*/
/*计算一轮中终点与始点的距离*/
sum+=(x1[i]-x0[i])*(x1[i]-x0[i]);
=f2)/*判断将终点还是将映射点赋给下一轮始点*/
i++)/*将终点赋给下一轮始点*/
x0[i]=x1[i];
i++)/*将映射点赋给下一轮始点*/
x0[i]=x2[i];
{/*需要换*/
for(i=r;
i++)/*去掉第r+1个方向,其它方向前移*/
for(j=0;
j<
j++)
s[i][j]=s[i+1][j];
i++)/*生成新方向放在最后*/
s[n][i]=x1[i]-x0[i];
mjtf(n,x1,h,s[n],a,b);
/*按新方向搜索一次*/
if(sqrt(sum)<
=flag)/*判断是否满足精度要求*/
break;
k+=1;
i++)/*输出极小点坐标*/
x[i]=x1[i];
鲍威尔法主程序*//*
voidmain()
inti,n;
floath,flag,x0[m],a[m],b[m],x[m];
printf("
\n<
鲍威尔法>
\n"
);
维数:
2\n"
n=2;
请输入初始点:
"
\nx0[%d]="
i);
scanf("
%f"
&
x0[i]);
\n请输入初始步长:
h);
\n请输入精度:
flag);
flag=0.1;
mbwef(n,x0,h,flag,a,b,x);
\n极小点坐标为:
x[%d]=%f\n"
i,x[i]);
\n极小值为:
\n%f\n"
f(x));
system("
pause"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 鲍威尔
![提示](https://static.bdocx.com/images/bang_tan.gif)