深度理解Powell优化算法
生活随笔
收集整理的這篇文章主要介紹了
深度理解Powell优化算法
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.鮑威爾優(yōu)化法綜述
鮑威爾法又稱方向加速法,它由Powell于1964年提出,是利用共軛方向可以加快收斂速度的性質(zhì)形成的一種搜索方法。該方法不需要對目標函數(shù)進行求導,當目標函數(shù)的導數(shù)不連續(xù)的時候也能應用,因此,鮑威爾算法是一種十分有效的直接搜索法。 Powell法可用于求解一般無約束優(yōu)化問題,對于維數(shù)n<20的目標函數(shù)求優(yōu)化問題,此法可獲得較滿意的結果。 不同于其他的直接法,Powell法有一套完整的理論體系,故其計算效率高于其他直接法。該方法使用一維搜索,而不是跳躍的探測步。同時,Powell法的搜索方向不一定為下降方向。2.共軛方向的概念與共軛向量的性質(zhì)
2.1 共軛方向
設A為n階實對稱正定矩陣,若有兩個n維向量S1和S2可以滿足S1*AS2=0.則稱向量S1與S2對矩陣A共軛,共軛向量的方向稱為共軛方向。2.2 共軛向量的性質(zhì)
設A為n×n階實對稱正定矩陣,Si(i=1,2,3,...,n)是關于A的n個相互共軛的非零向量,對于正定二次函數(shù)f(x)的極小化尋優(yōu)問題,從任何初始點出發(fā),依次沿Si方向經(jīng)過n次一維搜索即可收斂到極小點X*=X(n)。 沿n元二次正定函數(shù)的n個共軛方向進行n次一維搜索就可達到目標函數(shù)的極小點。3.原始Powell法的基本思想及其弊端
3.1 原始Powell法的基本思想及計算步驟
計算步驟: Step1:選取初始數(shù)據(jù)。選取初始點x0,n個線性無關的搜索方向d0,d1,...dn-1,給定允許誤差Err,令k>0; Step2:進行基本搜索。令y0=x1,依次沿d0,d1,...,dn-1進行一維搜索。對一切j=1,2,...,n記f(y(j-1)+λ(j-1)d(j-1)) = min f(y(j-1)+λd(j-1)), y(j) = y(j-1)+λ(j-1)d(j-1); Step3:進行加速搜索。取加速方向d(n)=y(n)-y(0);若||d(n)||<Err,迭代終止,得到y(tǒng)(n)為問題的近似最優(yōu)解;否則,點y(n)出發(fā)沿d(n)進行一維搜索,求出λ(n),使得f(y(n)+λ(n)d(n))=min f(y(n)+λd(n)). 記:x(k+1) = y(n)+λ(n)d(n),轉(zhuǎn)Step4. Step4:調(diào)整搜索方向。在原來n個方向d(0),d(1),...,d(n-1)中,除去d0增添d(n),構成新的搜索方向,返回Step2.3.2 Powell算法的迭代格式
原始的Powell法是沿著逐步產(chǎn)生的共軛方向進行一維搜索的。現(xiàn)在以二維二次目標函數(shù)為例來說明。如上圖所示,選定初始點X0(1),初始方向S1(1)=e1=[1,0]';S2(1)=e2=[0,1]'; 第一輪循環(huán): 初始點X0(1)---->(e1,e2)---->終點X2(1)---->生成新方向 S(1) = X2(1)-X0(1); 第二輪循環(huán): 初始點X0(2)---->(e2,S(1))---->終點X2(2)---->生成新的方向 S(2) = X2(2)-X0(2); 通過上圖我們會發(fā)現(xiàn),點X0(2)、X2(2)是先后兩次沿S(1)方向一維搜索到得極小點。由共軛性可以得到:連接X0(2)和X2(2)構成的矢量S(2)與S(1)對H共軛。 從理論上講,二維二次正定函數(shù)經(jīng)過這組共軛方向的一維搜索,迭代點以達到函數(shù)函數(shù)的極小值點X*。 將此結構推廣至n維二次正定函數(shù),即依次沿n個(S(1),S(2),...,S(n))共軛方向一維搜索就能達到極限值點。
3.3 原始Powell算法的特點
1.原始的Powell算法也是一種共軛方向法,由于它僅僅需要計算目標函數(shù)值而不必求導數(shù)值。因此Powell算法比普通的共軛方向法(共軛梯度法)更具實用性。 2.原始Powell算法可用于求解一般無約束優(yōu)化問題。 3.然而,在原始的Powell算法中,必須保持每次迭代中前n搜索方向線性無關,否則將永遠得不到問題的最優(yōu)解。3.4 Powell法缺陷
當某一循環(huán)方向組中的矢量系出現(xiàn)線性相關的情況(退化,病態(tài))時,搜索過程在降維的空間進行,致使計算不能收斂而失敗。為了避免此種情況產(chǎn)生,提出了修正的Powell算法。
4.改進的Powell算法
4.1.算法原理
為了避免鮑威爾法缺陷,Powell提出了相應的修正算法:和原始的Powell算法的主要區(qū)別在于: 1. 在構成第k+1次循環(huán)方向組時,不用淘汰前一循環(huán)中的第一個方向S1(k)的辦法,而是計算函數(shù)值,并根據(jù)是否滿足條件進行計算。 2. 找出前一輪迭代法中函數(shù)值下降最多的方向m以及下降量△m,即:
可以證明:若f3<f1;
同時成立。
表明方向Sk(n)與原方向組成線性無關,可以用來替換對象△m所對應的方向Sk(m)。否則仍然用原方向組進行第k+1輪搜索。
4.2 改進Powell算法計算步驟
Step1:選取初始數(shù)據(jù)。選取初始點x0,n個線性無關的初始搜索方向d0,d1,...,dn-1;給定允許誤差Err>0,令k=0; Step2:進行基本搜索。令y0=x(k),依次沿d0,d1,...,dn-1進行一維搜索。對一切j=1,2,...,n,記f(y(j-1)+λ(j-1)d(j-1)) = ? ? ? ? ? ? ? ? minf(y(j-1)+λd(j-1)), ? ? y(j) =?f(y(j-1)+λ(j-1)d(j-1)) ; Step3:檢查是否滿足終止條件。取加速度方向d(n)=y(n)-y(0);若||d(n)||<Err,迭代終止,得yn為問題的最優(yōu)解;否則? ? 轉(zhuǎn)Step4。 Step4:確定搜索方向,按照上式公式確定m,若驗證式子成立,轉(zhuǎn)Step5;否則,轉(zhuǎn)Step6。 Step5:調(diào)整搜索方向。從點yn出發(fā)沿方向dn進行一維搜索,求出λn,使得f(yn+λn*dn)=min f(yn+λ*dn);令? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?x(k+1)=yn+λn*dn。再令d(j)=d(j+1),j=m,m+1,...,n-1.k=k+1,返回Step2。 Step6:不調(diào)整搜索方向,令x(k+1)=yn;k=k+1,返回Step2。4.3 典型例題
用修正的Powell算法求f(x)=x1*x1+2*x2*x2-4*x1-2*x1*x2的最優(yōu)解。X0=[1,1]';收斂精度Err=0.001。解:X0(1)=X0=[1,1]';f1=f(x0(1))=-3; 第一輪進行循環(huán): 沿坐標軸方向向S1=[1,0]方向進行一維搜索: X1(1) = X0(1)+a(1)*S1(1) = [1,1]'+a1(1)[1,0]'=[1+a1(1),1]' 將X1(1)帶入上式,求導可以確定a1(1)=2時,得到極小值。此時,X1(1)=[3,1]; f(X1(1))=-7。 沿坐標軸方向向S2=[0,1]方向進行一維搜索: X2(1) = X1(1)+a2(1)*S2(1) = [3,1]'+[0,a2(1)]'=[3,1+a2(1)]'。 將X2(1)代入上式,求導可以確定a2(1)=1/2,得到極小值。此時,X2(1)=[3,1.5]; f(X2(1))=-7.5。 檢驗是否滿足終止迭代條件||X2(1)-X0(1)|| = 2.06>Err. 計算各個方向上的函數(shù)下降量: △1=f(X0(1))-f(X1(1))=4; △2=f(X1(1))-f(X2(1))=0.5; △m=min{4,0.5}=4; 映射點: X(1) = 2X2(1)-X0(1)=2*[3,1.5]'-[1,1]=[5,2]; 條件驗證:f3=f(X(1))=-7, f3<f1 (f1-2f2+f3)(f1-f2-△m)^2 = 1.25 < △m/2*(f1-f3)^2 =32 滿足。 因此,得到新的搜索方向:S(1)=X2(1)-X0(1)=[3,1.5]-[1,1]=[2,1.5]';
沿S(1)方向再次做一維搜索: X3(1)=X2(1)+a3(1)*S(1)=[3,1.5]+a3(1)[2,1.5] = [3+2*a3(1),1.5+1.5a3(1) ]; 當a3(1)=0.4時,取得極小值。此時,X3(1)=[19/5,17/10]; f(X3(1)) = -7.9。
以X0(2) = X3(1)作為新的起點,沿(e2,S(1))方向進行一維搜索,開始進入第二個循環(huán): X2(0)=[19/5,17/10]; f(X2(0))=-7.9; 沿e2=[0,1]方向進行一維搜索: X1(2) = [19/5,19/10]; f(X1(2))=-7.98? 沿S(1)=[2,1.5]方向進行一維搜索: X2(2) = [99/25,97/50]; ?f(X2(2)) =-7.996 檢驗:||X2(2)-X2(0)|| = 0.288>Err 繼續(xù)進行迭代:△1=0.08; ?△2=0.016; ?△m=0.08; 映射點:X(2)=2*X2(2)-X0(2)=[103/25,109/50]; f(X(2))=-7.964>f1 條件不滿足。 新的方向:S(2)=[99/25,97/50]-[19/5,17/10]=[4/25,12/50];
進行繼續(xù)迭代時,取X3(0)=X2(2),沿著(e2,S(1))方向一維搜索進行第三輪循環(huán): X3(1)=[99/25,99/50] ; f1=-7.9992; X3(2)=[3.9992,1.988]; f2=-7.99984; 檢驗:||X2(3)-X0(3)||=0.0577 >Err; X(3)=[4.024,2.036]'; f3=-7.99856; ?f3>f1. 由于S(1)即S(2)為共軛方向,目標函數(shù)是二次函數(shù),若沿S(2)方向進行一維搜索得到 X(2)=[4,2],F(X(2))=-8,此為目標函數(shù)的最優(yōu)解。
總結
以上是生活随笔為你收集整理的深度理解Powell优化算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 精美网站登录界面 php,window_
- 下一篇: 增值税发票税控开票软件数据接口规范