最優化——線搜索matlab程序

function [alpha, funcN, exitflag]=lines(funct, rho, l, u, alpha_0, f, gd, x, d, varargin)
alpha = alpha_0;
funcN = 0;
i = 0; imax = 30;
while i <= imax
    fn = feval(funct, x + alpha*d, varargin{:});
    i = i + 1;
    funcN = funcN +1;
    if fn < f + alpha*rho*gd
        exitflag = 0;
        return;
    else
        alphan = -gd*alpha^2*0.5/(fn-f-alpha*gd);
        alphan = max(l*alpha, alphan);
        alpha  = min(u*alpha, alphan);
    end
end
exitflag = 0;
if i>= imax & fn >= f
    exitflag = -1;
end
end

說明:
(1)參數推薦值:rho=0.01, l=0.15, u=0.85
(2)該程序被共軛梯度法調用
(3)imax=30這是一個允許線搜索子迭代的最大次數
(4)varargin是胞型數組,允許空或任意多輸入變量。(在約束優化問題可發揮可調輸入變量的好作用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章