一.线搜索技术之黄金分割法
1.什么是线搜索技术
最优化问题中,线搜索是一种寻找目标函数的局部最小值 的近似方法。 它是最基础的迭代近似方法之一,另一种是置信域方法。 线搜索近似首先找到一个使目标函数 下降的方向,然后计算应该沿着这个方向移动的步长。下降方向可以通过多种方法计算,比如梯度下降法,牛顿法和拟牛顿法。
维基百科
搜索技术在寻找目标函数局部极小值得时候,有两步操作:
- 找到目标函数下降的方向
- 确定步长,使初始点不断接近局部极小值点,使目标函数的值也近似为局部最小值第二步是确定步长。
线搜索技术解决问题的范围:
- 目标函数为线性收敛
线搜索技术的分类
- 精确线搜索技术: 求步长x,使得目标函数f沿方向d达到极小 (精度高)
- 非精确线搜索技术: 求步长x,使得目标函数沿方向d达到可接受范围的下降量 (精度小一点)
2.什么是黄金分割法(0.616法)
黄金分割法:通过对试探点函数值得比较,使得包含极小值的区间不断缩小,每次区间缩小0.616倍 1
通常在采用黄金分割法求局部极小值时,首先要确定一个单峰区间[a,b]如下图所示:
单峰区间确定的方法有进退法1:
3.通过MATLAB代码求解一道题
题目:用0.616法求解
初始区间x[0,1],变量的误差为 =0.05,函数值的误差为=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的误差为 , ,
来源:CSDN
作者:白马非马·
链接:https://blog.csdn.net/qq_42974034/article/details/104291818