zoukankan      html  css  js  c++  java
  • 线搜索技术-进退法

    进退法 1

    进退法是一种确定搜索区间并保证具有近似单峰性质的数值算法, 其基本思想是从一点出发, 按一定步长, 试图确定函数值呈现“高-低-高”的三点, 从而得到一个近似的单峰区间.

    算法1 (进退法)

    步1 选取α00, h0>0. 计算ϕ0:=ϕ(α0). 置k:=0.
    步2αk+1=αk+hk, 计算ϕk+1=ϕ(αk+1). 若ϕk+1ϕk, 转步3, 否则转步4.
    步3 加大步长. 令hk+1=2hk, α=αk, αk=αk+1, ϕk=ϕk+1, k=k+1, 转步2.
    步4 反向搜索或输出. 若k=0, 令h1=h0, α=α1, α1=α0, ϕ1=ϕ0, k=1, 转步2; 否则停止迭代, 令

    a=min{α,αk+1}, b=max{α,αk+1}

    输出[a,b].

    MATLAB实现

    function [a,b,k]=bfm(phi,alpha0,h0)
    %功能: 确定搜索区间-进退法
    %输入: phi 是目标函数, alpha0初始点和h0是初始步长
    %输出: [a,b]是搜索区间
    % 一种确定搜索区间并保证具有近似单峰性质的数值算法—进退法, 其基本思想是从一点出发, 
    % 按一定步长, 试图确定函数值呈现“高-低-高”的三点, 从而得到一个近似的单峰区间
    
    %step1
    f0=feval(phi,alpha0);
    k=0;
    
    while(1)
        %step2
        alpha1 = alpha0+h0;
        f1=feval(phi,alpha1);
    
        if f1<f0
            %step3
            h1=2*h0;
            Alpha=alpha0;
            alpha0=alpha1;
            f0=f1;
            k=k+1;
            %k+1后变量变化,注意
            alpha0=alpha1;
            h0=h1;
        else
            %step4
            if k==0
                h1=-1*h0;
                Alpha=alpha1;
                alpha1=alpha0;
                f1=f0;
                k=1;
                %k+1后变量变化注意
                alpha0=alpha1;
                h0=h1;
            else
                a=min(Alpha,alpha1);
                b=max(Alpha,alpha1);
                break;
            end
        end
    end

    测试

    >> clear
    >> phi=@(x)((x-1)^2);
    >> [a,b,k]=bfm(phi,0,0.1)
    a =
                           0.3
    b =
                           1.5
    k =
         3

    1. 马昌凤. 最优化方法及其Matlab程序设计[M]. 科学出版社, 2010.
  • 相关阅读:
    数据应用
    Python邮件脚本
    函数
    tab模块
    python登陆,注册小程序
    三元运算+lambda表达式
    计算机基础
    软件测试概要
    asyn_fifo
    perl 对ENV环境变量的使用
  • 原文地址:https://www.cnblogs.com/born2run/p/9581405.html
Copyright © 2011-2022 走看看