机械优化设计鲍威尔法.docx
- 文档编号:6169927
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:75.73KB
机械优化设计鲍威尔法.docx
《机械优化设计鲍威尔法.docx》由会员分享,可在线阅读,更多相关《机械优化设计鲍威尔法.docx(15页珍藏版)》请在冰豆网上搜索。
机械优化设计鲍威尔法
机械优化设计——鲍威尔法
机械优化设计
班级:
0841001
成员:
张波2010213217
张建2010213214
潘阳瑞2010213227
2013年6月
鲍威尔法
鲍威尔(Powell)法是直接利用函数值来构造共轭方向的一种方法。
基本思想:
在不用导数的前提下,在迭代中逐次构造G的共轭方向。
一(基本算法:
(二维情况描述鲍威尔的基本算法)
0T1)任选一初始点x,再选两个线性无关的向量,如坐标轴单位向量e=[1,0]和1T=[0,1]作为初始搜索方向。
e20002)从出发,顺次沿、作一维搜索,得、点,两点连线得一新xeexx12121001方向d,x,xd2
011用代替e形成两个线性无关向量,e,作为下一轮迭代的搜索方向。
再从xdd1,1201出发,沿作一维搜索得点,作为下一轮迭代的初始点。
xd111113)从出发,顺次沿、作一维搜索,得到点、,两点连线得一新方向:
exxxd122211。
d,x,x21
*22沿作一维搜索得点,即是二维问题的极小点。
xdx
把二维情况的基本算法扩展到n维,则鲍威尔基本算法的要点是:
在每一轮迭代中总有一个始点(第一轮的始点是任选的初始点)和n个线性独立的搜索方向。
从始点出发顺次沿n个方向作一维搜索得一终点,由始点和终点决定了一个新的搜索方向。
用这个方向替换原来n个方向中的一个,于是形成新的搜索方向组。
替换的原则是去掉原方向组的第一个方向而将新方向排在原方向的最后。
此外规定,从这一轮的搜索终点出发沿新的搜索方向作一维搜索而得到的极小点,作为下一轮迭代的始点。
这样就形成算法的循环。
图1.二维情况下的鲍威尔法
二(改进算法
在鲍威尔基本算法中,每一轮迭代都用连结始点和终点所产生出的搜索方向去替换原向量组中的第一个向量,而不管它的“好坏”,这是产生向量组线性相关的原因所在。
在改进的算法中首先判断原向量组是否需要替换。
如果需要替换,还要进一步判断原向量组中哪个向量最坏,然后再用新产生的向量替换这个最坏的向量,以保证逐次生成共轭方向。
为此,要解决两个关键问题:
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)沿方向进行一维搜索得,过程同上,得:
2
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方向一维搜索得极小点和极小值:
33
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故最优解:
2
12实际上,前两轮迭代的d,d为共轭方向,由于本例目标函数是二次函数,按33
共轭方向的二次收敛性,故前两轮的结果就是问题的最优解,但每一轮迭代都需要进行
n+1次迭代。
图3.迭代过程图
附录:
#include
#include
#include
#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 { x1[i]=x0[i]; x2[i]=x0[i]+h*s[i]; } f1=f(x1); f2=f(x2); if(f2>=f1)/*判断搜索方向*/{/*搜索方向为反向,转身*/ h=(-1)*h; for(i=0;i x3[i]=x1[i]; f3=f1; for(i=0;i x1[i]=x2[i]; f1=f2; for(i=0;i x2[i]=x3[i]; f2=f3; }/*搜索方向为正向*/ for(i=0;i x3[i]=x2[i]+h*s[i]; f3=f(x3); while(f3 {/*未完成,继续搜索*/ h=2*h; for(i=0;i x1[i]=x2[i]; f1=f2; for(i=0;i x2[i]=x3[i]; f2=f3; for(i=0;i x3[i]=x2[i]+h*s[i]; f3=f(x3); }/*已完成*/ for(i=0;i if(h>0) { a[i]=x1[i]; b[i]=x3[i]; } else { a[i]=x3[i]; b[i]=x1[i]; } } } /*黄金分割法子程序*/ 入口参数: /* n: 优化模型维数 a: n维数组,搜索区间下限 b: n维数组,搜索区间上限 flag: 迭代精度*//*出口参数: x: n维数组,极小点坐标*/voidgold(intn,floata[],floatb[],floatflag,floatx[]) { inti; floatx1[m],x2[m],f1,f2,sum; for(i=0;i x1[i]=b[i]-(float)0.618*(b[i]-a[i]); f1=f(x1); for(i=0;i x2[i]=a[i]+(float)0.618*(b[i]-a[i]); f2=f(x2); do { if(f1<=f2)/*判断消去区间*/ {/*消去右区间*/ for(i=0;i b[i]=x2[i]; for(i=0;i x2[i]=x1[i]; f2=f1; for(i=0;i x1[i]=b[i]-(float)0.618*(b[i]-a[i]); f1=f(x1); } else {/*消去左区间*/ for(i=0;i a[i]=x1[i]; for(i=0;i x1[i]=x2[i]; f1=f2; for(i=0;i x2[i]=a[i]+(float)0.618*(b[i]-a[i]); f2=f(x2); } sum=0; for(i=0;i sum+=(b[i]-a[i])*(b[i]-a[i]); }while(sqrt(sum)>flag*0.1);/*判断是否未达到精度要求,若未达到 则返回继续缩小区间*/ for(i=0;i x[i]=(float)0.5*(b[i]+a[i]);/*已达到,输出极小点*/ } /*鲍威尔法子程序*/ /*入口参数: n: 优化模型维数 x0: n维数组,初始点坐标 h: 初始搜索步长 flag: 迭代精度 a: n维数组,搜索区间下限 b: n维数组,搜索区间上限*/ /*出口参数: x: 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; for(i=0;i for(k=0;k if(i==k) s[i][k]=1; else s[i][k]=0; k=1; while (1) { for(i=0;i x1[i]=x0[i]; for(i=0;i { mjtf(n,x1,h,s[i],a,b);/*调用外推法子程序*/ gold(n,a,b,flag,x1);/*调用黄金分割法子程序*/ fn[i]=f(x0)-f(x1);/*计算函数下降值*/ } for(i=0;i x2[i]=2*x1[i]-x0[i]; for(i=1;i if(fn[0] { fn[0]=fn[i]; r=i;/*搜索方向累加*/ } else r=0; f0=f(x0);/*计算始点、终点和映射点的函数值*/ f1=f(x1); f2=f(x2); if(f2>=f0||(f0-2*f1+f2)*(f0-f1-fn[0])*(f0-f1-fn[0])>=0.5*fn[0]*(f0-f2)*(f0- f2)){/*判断是否需要换方向*//*不需要换*/ sum=0;/*计算一轮中终点与始点的距离*/ for(i=0;i sum+=(x1[i]-x0[i])*(x1[i]-x0[i]); if(f1<=f2)/*判断将终点还是将映射点赋给下一轮始点*/ for(i=1;i x0[i]=x1[i]; else for(i=1;i x0[i]=x2[i]; } else {/*需要换*/ for(i=r;i for(j=0;j s[i][j]=s[i+1][j]; for(i=0;i s[n][i]=x1[i]-x0[i]; mjtf(n,x1,h,s[n],a,b);/*按新方向搜索一次*/ gold(n,a,b,flag,x1); sum=0;/*计算一轮中终点与始点的距离*/ for(i=0;i sum+=(x1[i]-x0[i])*(x1[i]-x0[i]); for(i=0;i x0[i]=x1[i]; } if(sqrt(sum)<=flag)/*判断是否满足精度要求*/ break; else k+=1; } for(i=0;i x[i]=x1[i]; } 鲍威尔法主程序*//* voidmain() { inti,n; floath,flag,x0[m],a[m],b[m],x[m]; printf("\n<鲍威尔法>\n"); printf("维数: 2\n"); n=2; printf("请输入初始点: "); for(i=0;i { printf("\nx0[%d]=",i); scanf("%f",&x0[i]); } printf("\n请输入初始步长: \n"); scanf("%f",&h); printf("\n请输入精度: \n"); scanf("%f",&flag); flag=0.1; mbwef(n,x0,h,flag,a,b,x); printf("\n极小点坐标为: \n"); for(i=0;i printf("x[%d]=%f\n",i,x[i]); printf("\n极小值为: \n%f\n",f(x)); system("pause"); } 机械优化设计 班级: 0841001 成员: 张波2010213217 张建2010213214 潘阳瑞2010213227 2013年6月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 优化 设计 鲍威尔