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.
  • 相关阅读:
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSIS 系列
    微软BI 之SSAS 系列
    微软BI 之SSRS 系列
    微软BI 之SSRS 系列
    配置 SQL Server Email 发送以及 Job 的 Notification通知功能
  • 原文地址:https://www.cnblogs.com/born2run/p/9581405.html
Copyright © 2011-2022 走看看