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