matlab 线搜索-Armijo算法

线搜索-Armijo算法

  • 一、使用条件
  • 二、算法及程序
    • 1.Armijo准则程序
    • 2.目标函数
    • 3.梯度
  • 总结


一、使用条件

不精确的一维搜索条件规定αk首先应该保证使目标函数充分减小,这个条件使用以下不等式描述:
f (xk+αpk)≤f(xk )+c1α△fTpk
其中c1∈(0,1)的常数。也就是说,目标函数f的下降要与步长和下降方向成一定的比例。
c1是一个很小的值,一般选择c1=10-4。

二、算法及程序

1.Armijo准则程序

代码如下(示例):

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%用Armijo法求单变量函数在单峰区间[a,b]上的近似极小点
%在命令窗口输入函数:[alpha,mk,newxk, fk, newfk] = Armijo([0 0]', [1 0]')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [alpha,mk,newxk, fk, newfk] = Armijo(xk, dk)
%功能: Armijo法非精确线搜索
%输入: fun是目标函数, gfun是目标函数的梯度,a, b是搜索区间的两个端点
%      beta,sigma是已知参数
%输出: newxk, fk分别是近似极小点和极小值,
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
beta = 0.5;    % beta取值范围为[0,1]
sigma = 0.2;   % sigma取值范围为[0,0.5]
m = 0; 
mmax = 20; 
while (m<=mmax)
    if fun(xk + beta^m*dk) <= fun(xk) + sigma*beta^m*gfun(xk)'*dk   % 条件1
        mk=m;   break;
    end
    m=m+1;
end
alpha=beta^mk;
newxk = xk + alpha*dk;
fk = fun(xk);
newfk = fun(newxk);
 

2.目标函数

代码如下(示例):

function f=fun(x)
f = 100*(x(1)^2 - x(2))^2 + (x(1)-1)^2;

3.梯度

代码如下(示例):

function gf=gfun(x)
gf = [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1);
        -200*(x(1)^2 - x(2))];

总结

matlab 线搜索-Armijo算法_第1张图片

你可能感兴趣的:(算法,深度学习,机器学习,matlab)