第二章 线搜索技术

内容来自马昌凤编著的《最优化方法及其Matlab程序设计》,文章仅为个人的学习笔记,感兴趣的朋友详见原书

精确线搜索&非精确线搜索

在这里插入图片描述

精确线搜索及其Matlab实现

基本思想:首先确定包含问题最优解的搜索区间,然后采用某种插值或分割技术缩小这个区间,进行搜素求解。

分类:一类是使用导数的搜索,如插值法、牛顿法及抛物线法等;
另一类是不用导数的搜索,如0.618法、分数法及成功-失败法等

黄金分割法(0.618法)

算法
在这里插入图片描述
程序:

function [s,phis,k,G,E]=golds(phi,a,b,delta,epsilon)
%功能: 0.618法精确线搜索
%输入: phi是目标函数, a, b 是搜索区间的两个端点
%         delta, epsilon分别是自变量和函数值的容许误差
%输出:  s, phis分别是近似极小点和极小值,  G是nx4矩阵,
%         其第k行分别是a,p,q,b的第k次迭代值[ak,pk,qk,bk],
%          E=[ds,dphi], 分别是s和phis的误差限.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t=(sqrt(5)-1)/2;  h=b-a;  phia=feval(phi,a); phib=feval(phi,b);
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)>epsilon)|(h>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(phip<=phiq)
    s=p;  phis=phip;
else
    s=q;  phis=phiq;
end
E=[ds,dphi];

非精确线搜索及其Matlab实现

Wolf准则

在这里插入图片描述

Armijo准则

算法:
在这里插入图片描述
程序:

function mk=armijo(xk,dk )
beta=0.5;  sigma=0.2;
m=0; mmax=20;
while (m<=mmax)
    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)

说明:此处的 f u n fun fun g f u n gfun gfun分别指目标函数和它的梯度函数的子程序,执行时这两个子程序需在armijo运行前准备好。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值