zoukankan      html  css  js  c++  java
  • 非精确线搜索

    Wolfe准则

    Wolfe 准则是指: 给定ρ(0,0.5),σ(ρ,1),求αk使得下面两个不等式同时成立:

    f(xk+αkdk)f(xk)+ραkgTkdkf(xk+αkdk)TdkσgTkdk(1)(2)

    式中:gk=g(xk)=f(xk).

    式(2)有时也用另一个更强的条件

    f(xk+αkdk)TdkσgTkdk(3)

    来代替. 这样, 当σ>0充分小时,可保证式(3)变成近似精确线性搜索。条件(1)和条件(3)也称为强Wolfe准则。

    Wolfe 准则表明, 由该准则得到的新的迭代点xk+1=xk+αkdkxk的某一邻域内且使目标函数值有一定的下降量.

    由于gTkdk<0,可以证明Wolfe 准则的有限终止性, 即步长αk的存在性. 我们有下面的定理.

    f(x) 有下界且gTkdk<0, 令ρ(0,0.5),σ(ρ,1). 则存在一个区间[a,b](0<a<b), 使每个α[a,b] 均满足(1) 和(3).

    Armijo 准则

    Armijo 准则是指: 给定β(0,1),σ(0,0.5). 令步长因子αk=βmk,其中mk是满足下列不等式的最小非负整数:

    f(xk+βmdk)f(xk)+σβmgTkdk(4)

    可以证明, 若f(x)是连续可微的且满足gTkdk<0, 则Armijo 准则是有限终止的, 即存在正数σ, 使得对于充分大的正整数m, (4) 式成立.

    为了程序实现的方便, 我们将Armijo 准则写成下列详细的算法步骤.

    算法4(Armijo准则)

    步0 给定β(0,1),σ(0,0.5). 令m=0.

    步1 若不等式

    f(xk+βmdk)f(xk)+σβmgTkdk

    成立, 置mk=m,xk+1=xk+βmkdk 停算. 否则, 转步2.

    步2m=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;
        end
        m=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.75
                           0.5
    newfk =
                      3.453125
  • 相关阅读:
    vue指令参考
    jquery easyui 研究(一)Datagrid初始化设置
    HTML之响应协议
    HTTP协议之请求协议
    HTTP协议之HTTP概述
    Day18_函数定义_形参_实参_可变参数
    Day19_名称空间和作用域_函数的嵌套_函数第一类对象的使用_闭包函数
    跳转语句 break 和 continue
    JS中强制类型转换
    toString
  • 原文地址:https://www.cnblogs.com/born2run/p/9581401.html
Copyright © 2011-2022 走看看