[最优化方法MATLAB]学习笔记1:线搜索技术之黄金分割法

和自甴很熟 提交于 2020-02-14 13:41:42

一.线搜索技术之黄金分割法

1.什么是线搜索技术

最优化问题中,线搜索是一种寻找目标函数的局部最小值 的近似方法。 它是最基础的迭代近似方法之一,另一种是置信域方法。 线搜索近似首先找到一个使目标函数 下降的方向,然后计算应该沿着这个方向移动的步长。下降方向可以通过多种方法计算,比如梯度下降法,牛顿法和拟牛顿法。
维基百科

搜索技术在寻找目标函数局部极小值得时候,有两步操作:
  • 找到目标函数下降的方向
  • 确定步长,使初始点不断接近局部极小值点,使目标函数的值也近似为局部最小值第二步是确定步长。
线搜索技术解决问题的范围:
线搜索技术的分类
  • 精确线搜索技术: 求步长x,使得目标函数f沿方向d达到极小 (精度高)
  • 非精确线搜索技术: 求步长x,使得目标函数沿方向d达到可接受范围的下降量 (精度小一点)

2.什么是黄金分割法(0.616法)

黄金分割法:通过对试探点函数值得比较,使得包含极小值的区间不断缩小,每次区间缩小0.616倍 1
最优化方法及其MATLAB程序设计-马昌凤
通常在采用黄金分割法求局部极小值时,首先要确定一个单峰区间[a,b]如下图所示:

单峰区间确定的方法有进退法1
在这里插入图片描述

3.通过MATLAB代码求解一道题

题目:用0.616法求解
minf(z)=x2x1. \min f(z) = x^{2}-x-1\,.
初始区间x\in[0,1],变量的误差为 α\boldsymbol{\alpha}=0.05,函数值的误差为δ\boldsymbol{\delta}=0.05

%%0.616法程序:用0.616法求单变量函数F的单峰区间[a,b]上的近似极小点
function  [s,phis,k,G,E]=golds(phi,a,b,delta,espilon)
%输入:   phi是目标函数;   a,b是搜索区间的两个端点
%         delta和espilon分别是自变量和函数值得允许误差
%输出:    s,phis分别为近似极小点和极小值,    G是nx4矩阵,
%          其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],
%          E=[ds,dphs],分别是s和phis的误差限。

t=(sqrt(5)-1)/2;    h=b-a ;         %t为黄金分割点,h为搜索区间大小
phia=feval(phi,a);    
 phib=feval(phi,b) ; % a,b两点的值    %feval就是一个求值函数,
                                     %把自变量带到函数里,求解函数的值
p=a+(1-t)*h;    q=a+t*h;             %定好两个测量点
phip=feval(phi,p);     phiq=feval(phi,q) ;      %两个测量点的值
k=1;   G(k,:)=[a,p,q,b];

while(abs(phib-phia)>espilon|(b-a)>delta)        %循环体开始
        if(phip<phiq)
            b=q;phib=phiq;
            q=p;phiq=phip;
            h=b-a;p=a+(1-t)*h;phip=feval(phi,p);
        else
                a=p;phia=phip;
                p=q;phip=phiq;
                h=b-a;q=a+t*h;phiq=feval(phi,q);
        end
        k=k+1;G(k,:)=[a,p,q,b];                  %参数进行保存输出
end
                                                 %结尾,确定自变量和函数量的误差,再有就是确定最小值
        ds=abs(b-a);dphi=abs(phib-phia);
        if(phib>phia)
            s=a;phis=phia;
        else
            s=b;phis=phib;
        end
        E=[ds,dphi];
end

 

调用子程序,然后进行运行

[s,phis,k,G,E]=golds(inline('s^2-s-1'),-1,1,1e-5,1e-5)    

运行结果:
x=0.5x=0.5时,函数的局部极小值为1.25-1.25,x的误差为 7.3687.368, × 106\times\ 10^{-6},


  1. [最优化方法及其MATLAB程序设计-马昌凤 ↩︎ ↩︎

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!