求解非約束優化問題的擬牛頓方法(BFGS DFP)

2021-12-30 10:59:33 字數 2824 閱讀 1814

擬牛頓法是一種以牛頓法為基礎設計的,求解非線性方程組或連續的最優化問題函式的零點或極大、極小值的演算法。當牛頓法中所要求計算的雅可比矩陣或hessian矩陣難以甚至無法計算時,擬牛頓法便可派上用場。

考慮模型問題

最小化之,可得擬牛頓步長:

那麼,新的迭代為:

問題是,這裡的αk" role="presentation">αkαk 和 bk" role="presentation">bkbk如何選取?

我們在割線方程的約束框架下,分別求解子問題:

和子問題:

可以得到hk=bk−1" role="presentation">hk=b?1khk=bk?1的迭代:

當然,還有其他的一些hk" role="presentation">hkhk更新方式:

步長αk" role="presentation">αkαk如何選取?只要保證wolf條件,就能保證其收斂性。取精確線搜尋步長時,其值為1。

基本框架如下:

在迭代的過程中,我們不需要顯性地去求bk" role="presentation">bkbk,我們用到的只是它的逆,所以,我們可以用其逆hk" role="presentation">hkhk的迭代公式進行搜尋迭代。

clcclear

f = @(t)t(1)^2+2*t(2)^2;

x0 = [10,10]';

epsilon = 0.001;

h0 = eye(2);

method = 'bfgs';%dfp

x = quasi_newton(f,x0,epsilon,h0,method);

function [xk,k] = quasi_newton(f,x0,epsilon,h0,method)

%使用:quasi_newton(f,x0,method)

if nargin < 3

help mfilename;

endk = 0;

syms t1 t2;

t = [t1,t2]';

fs = f(t);

dfs = gradient(fs);

df = matlabfunction(dfs);

df = @(x) df(x(1),x(2));

df0 = df(x0);

normdf = sqrt(df0'*df0);

h = h0;

xk = x0;

dfk = df0;

while normdf > epsilon

p = -h*dfk;

alpha = cal_alpha(h,dfk);

xk1 = xk + alpha*p;

dfk1 = df(xk1);

sk = xk1 - xk;

yk = dfk1 - dfk;

eval(['h = ' method '(h,sk,yk);']);

%h = bfgs(h,sk,yk);

k = k + 1;

xk = xk1;

dfk = dfk1;

normdf = sqrt(dfk'*dfk);

xkendend

function alpha = cal_alpha(h,dfk)

%alpha = dfk'*h*dfk/(dfk'*h'*dfk);

alpha = 1;

endfunction h = bfgs(h,sk,yk)

gammak = 1/(yk'*sk);

skykt = sk * yk';

skskt = sk * sk';

e = eye(2);

h = (e-gammak*skykt)*h*(e-gammak*skykt) + gammak*skskt;

endfunction h = dfp(h,sk,yk)

hyk = h*yk;

yktsk = yk'*sk;

skskt = sk * sk';

h = h - (hyk*yk'*h)/(yk'*hyk) + skskt/yktsk;

end寫乙個程式用帶精確線搜尋步長的擬牛頓方法來求解以下問題:

初始點x0=(1,1)t" role="presentation">x0=(1,1)tx0=(1,1)t。分別使用bfgs和dfp的更新公式。為兩種方法都設定初始矩陣h0=i" role="presentation">h0=ih0=i。

通過簡單的8步迭代,我們就達到了乙個很高的精度,如下:

求解非約束優化問題的擬牛頓方法(BFGS DFP)

擬牛頓法是一種以牛頓法為基礎設計的,求解非線性方程組或連續的最優化問題函式的零點或極大 極小值的演算法。當牛頓法中所要求計算的雅可比矩陣或hessian矩陣難以甚至無法計算時,擬牛頓法便可派上用場。考慮模型問題 最小化之,可得擬牛頓步長 那麼,新的迭代為 問題是,這裡的 k k 和 bk b k如何...

無約束最優化方法 牛頓法

無約束最優化演算法 newton法原理及c 程式設計實現 2012 12 14 13 04 6536人閱讀收藏 舉報 演算法 27 作者同類文章x 無約束最優化方法 牛頓法 牛頓法 newton smethod 又稱為牛頓 拉弗森方法 newton raphson method 它是一種在實數域和複...

MATLAB有約束最優化問題的求解

有約束最優化問題的一般描述為 其中x x1,x2,xn t,該數學表示的含義亦即求取一組x,使得目標函式f x 為最小,且滿足約束條件g x 0。記號s.t.是英文subject to的縮寫,表示x要滿足後面的約束條件。約束條件可以進一步細化為 線性不等式約束 ax b 線性等式約束 aeqx be...