在鲍威尔基本算法中,每一轮迭代都用连接始点和终点所产生的搜索方向去替换原向量组中的第一个向量,而不管它的“好坏”,这是产生向量组线性相关的原因所在。因此在改进的算法中首先判断原向量组是否需要替换。如果需要替换,还要进一步判断原向量组中哪个向量最坏,然后再用新生成的向量替换这个最坏的向量,以保证逐次生成共轭方向。
改进算法的具体步骤如下:
1)任选初始点X0(记为X00),任选初始方向组,它由n个线性无关的向量(如n个坐标轴单位向量e1,e2,…,en)组成,置k←0。
2)从X0k出发,顺次沿这n个线性无关的向量作一维搜索得到点Xk1,Xk1,X2k,…,Xkn。接着以Xkn为起点,沿方向Skn+1=Xkn-X0k移动一个Xkn-X0k的距离,得
Xkn+1=2Xkn-X0k
X0k、Xkn、Xkn+1,分别称为一轮迭代点的始点、终点和反射点。始点、终点和反射点所对应的函数值分别表示为
F=f(Xk0)
F=f(Xkn)
F=f(Xkn+1)
同时,计算各中间点的函数值,并记为
fi=f(Xki) (i=0,1,2,…,n)
因此,有F0=f0,F2=fn。
计算n个函数值之差f0-f1,f1-f2,…,fn-1-fn。记作
Δi=fi-1-fi (i=0,1,2,…n)
其中最大值记作(i=0,1,2,…,n)。
3)根据是否满足判别条件
F3<F0
和
(F0-2F2+F3)(F0-F2-Fm)2<0.5Δm(F0-F3)2
来确定是否要对原方向组进行替换。
若不满足条件判断,则下轮迭代仍用原方向组,并以Xkn、Xkn+1中函数值小者作为下轮迭代点。
若满足上述判别条件,则下轮迭代应对原方向组进行替换,将Skn+1、Sk补充到原方向组的最后位置,而除掉Skm。即新方向组为Sk1,S2k,…,Skm-1,Skm+1,Skn,Skn+1作为下轮迭代的搜索方向。下轮迭代的始点取为沿Skn+1方向进行一维搜索极小点X0k+1。
4)判断是否满足收敛准则。若满足取X0k+1为极小点,否则应置k←k+1,返回步骤2),继续进行下一轮迭代。
这样重复迭代的结果,后面加进去的向量都彼此对H共轭,经n轮迭代即可得到一个由n个共轭方向所组成的方向组。对于二次函数,最多不超过n次就可找到极小点,而对一般函数,往往要超过n次才能找到极小点(这里的“n”表示设计空间的维数)。如果在n轮迭代后还未收敛,一般应该重新选择单位向量为迭代的初始方向进行迭代。
例10-2 用鲍威尔法求函数
f(x1,x2)=10(x1+x2-5)2+(x1-x2)2的极小值。
解:选初始点X00=[0 0]T,初始搜索方向S01=e1=[1 0]T,S02=e2=[0 1]T。初始点处函数值F0=f0=f(X00)=25。
第一轮迭代:
1)沿S01方向进行一维搜索得
最佳步长α1可通过下式获得
即
2)再沿S02方向进行一维搜索得
最佳步长α2的计算可根据:
进行,得
从第一轮终点X02处出发,沿S02走一步后的函数值增量为
F2=f2=F(X02)=15.214
Δ2=f1-f2=22.727-15.214=7.513(www.xing528.com)
沿S01、S02寻优后函数值增量中的最大者为
Δm=Δ1=227.273
终点X02的反射点及其函数值为
F3=f(X03)=385.24
3)为确定下一轮迭代的搜索方向和起始点,需检查判别条件F3<F0和(F0-2F2+F3)(F0-F2-Δm)2<0.5Δm(F0-F3)2是否满足。
因为F3>F0,所以不满足判别条件,因而下轮迭代中应该继续使用原来的搜索方向e1、e2。
因为F2<F3,所以取X02作为下轮迭代的起始点。
第二轮迭代:
第二轮初始点及其函数值:
1)沿e1方向(即x1轴方向)进行一维搜索,相当于固定x2=0.826,改变x1使函数F(x1,x2)的值极小。设计点X11位置可通过函数对x1的偏导数等于零求得,即
得
X11点处的函数值及函数值增量分别为
f1=f(X11)=10.185
Δ1=f0-f1=15.214-10.185=5.029
2)再沿方向e2(即x2轴方向)进行一维搜索,相当于固定x1=3.869,改变x2使函数f(x1,x2)的值极小。设计点X21位置可通过函数对x2的偏导数等于零求得,即
得
第二轮终点X21处的函数值及沿x2方向函数值增量分别为
F2=f2=f(X21)=6.818
Δ2=f1-f2=10.185-6.818=3.367
取Δ1、Δ2函数值增量中的最大者:
Δm=Δ1=5.029
终点X21的反射点及其函数值为
3)为确定下一轮迭代的搜索方向和起始点,需检查判别条件F3<F0和(F0-2F2+F3)(F0-F2-Fm)2<0.5Δm(F0-F3)2,经代入运算知该判别条件满足,应进行方向替换。用新方向S31替换e1,下轮迭代搜索方向为e2、S31,且
下轮迭代起始点X20为从X21出发,沿S31方向进行一维搜索的极小点,可通过下面计算求得:
通过
得下轮迭代初始点及其函数值为
可见已足够接近极值点X*=[2.5 2.5]T及极小值f(X*)=0。
该方法是一种非常有效的共轭方法,它可以在有限步内找到二次函数的极小值。对于非二次函数只要具有连续二阶导数,用这种方法也是有效的。
鲍威尔改进算法的程序框图如图10-6所示。
图10-6 鲍威尔改进算法程序框图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。