非精确线搜索
Wolfe準則
Wolfe 準則是指: 給定ρ∈(0,0.5),σ∈(ρ,1),求αk使得下面兩個不等式同時成立:
式中: gk=g(xk)=▽f(xk).
式(2)有時也用另一個更強的條件
來代替. 這樣, 當 σ>0充分小時,可保證式(3)變成近似精確線性搜索。條件(1)和條件(3)也稱為強 Wolfe準則。
強Wolfe 準則表明, 由該準則得到的新的迭代點xk+1=xk+αkdk在xk的某一鄰域內且使目標函數值有一定的下降量.
由于gTkdk<0,可以證明Wolfe 準則的有限終止性, 即步長αk的存在性. 我們有下面的定理.
設f(x) 有下界且gTkdk<0, 令ρ∈(0,0.5),σ∈(ρ,1). 則存在一個區間[a,b](0<a<b) 均滿足(1) 和(3).
Armijo 準則
Armijo 準則是指: 給定β∈(0,1),σ∈(0,0.5). 令步長因子αk=βmk,其中mk是滿足下列不等式的最小非負整數:
可以證明, 若 f(x)是連續可微的且滿足 gTkdk<0, 則 Armijo 準則是有限終止的, 即存在正數 σ, 使得對于充分大的正整數 m, (4) 式成立.
為了程序實現的方便, 我們將Armijo 準則寫成下列詳細的算法步驟.
算法4(Armijo準則)
步0 給定β∈(0,1), σ∈(0,0.5). 令 m=0.
步1 若不等式
成立, 置 mk=m,xk+1=xk+βmkdk 停算. 否則, 轉步2.
步2 令m=m+1, 轉步1.
下面給出Armijo 準則的Matlab 程序
MATLAB程序
Armijo 搜索規則是許多非線性優化算法都必須執行的步驟, 把它編制成可重復利用的程序模塊是很有意義的.
amj.m
function [mk,newxk,newfk]=amj(xk,dk,beta,sigma) %%Armijo 搜索規則 %input:xk,dk; % beta,sigma %output:mk,xk+1,f(xk+1)m=0;maxm=20; while(m<=maxm)if(fun(xk+beta^m*dk)<=fun(xk)+sigma*beta^m*gfun(xk)'*dk)mk=m;break;endm=m+1; end; alpha=beta^mk; newxk=xk+alpha*dk; fk=fun(xk); newfk=fun(newxk); %fun為輸入函數,gfun為對應梯度函數,均在別處定義fum.m
function f = fun(x) f=100*(x(1)^2-x(2))^2+(x(1)-1)^2;gfun.m
function gf =gfun(x) gf=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1);-200*(x(1)^2-x(2))];實驗結果
>> xk=[-1,1]'; >> dk=[1,-2]'; >> beta=0.5; >> sigma=0.2; >> [mk,newxk,newfk]=amj(xk,dk,beta,sigma) mk =2 newxk =-0.750.5 newfk =3.453125總結
- 上一篇: Mkdocs部署静态网页至GitHub
- 下一篇: grub4dos命令和grldr引导文件