方法 matlab,优化方法基础系列"/>
一维搜索方法 matlab,优化方法基础系列
在学习各种优化方法之前,我们需要先从简单的一维优化问题开始,即只有单一变量的优化问题,解决这类问题的方法可称为一维搜索技术,亦可称为线性所搜(Line Search)。一维搜索技术既可以独立的应用于求解单变量的优化问题,同时又是求解多变量优化问题的常用手段。
在大多数多变量函数的最优化中,迭代格式为:
其中最为关键的就是往哪走的搜索方向
和走多少的步长因子
,如果确定了搜索方向,那么求解步长因子
的问题就是一维优化问题,不妨设:
这样凡从
出发,沿搜索方向
,确定步长因子
,使得
(该系列文章涉及的优化方法以及步骤均默认为求极小值)的问题就是关于步长因子
的一维搜索问题。其主要结构可作如下概括:首先确定包含问题最优解的搜索区间,然后采用某种分割技术或者插值方法缩小这个区间,进行搜索求解。
一维搜索方法可以分为两大类,即精确搜索和非精确搜索。精确搜索,顾名思义就是求
的极小值,此时得到的
称为最优步长因子。如果选取的
使得
在可接受的范围内,这种情况就称为非精确的搜索。由于实际计算中,一般做不到精确的一维搜索,实际上也没有必要做到这一点,因为精确的一维搜索需要付出较高的代价,对加速收敛作用不大,因此花费计算量较少的不精确的一维搜索技术方法受到更为广泛的重视和欢迎。 但了解精确的一维搜索技术对于非精确的技术有帮助,所以本系列最开始依然先从精确的一维搜索技术展开。
精确的一维搜索技术
通常根据算法中有无使用导数,将精确的一维搜索技术分为两类,即无导数信息的试探法,包括二分法、黄金分割法、Fibonacci法、进退法等;有导数信息的插值法,包含二次插值法、牛顿法等。
高低高(单峰)区间定位(initially bracketing a minmum)
对于求根问题,通过两点相乘为负即可确定一个区间(连续函数)。那么对于求解一维函数
的局部极小值得问题,可以通过三点信息获得(a triplet of points),即如果
,使得
均小于
和
,且函数连续,那
之间就存在一个局部极小值,如下图所示:
图 1 高低高区间示意图
高低高区间的确定,最为常见的方法是进退法。
进退法的思想是先试探、再判断是进还是退,直到得到
,且
均小于
和
情况,则可确定区间。
Algorithm 1 进退法
function [a,b,c] = bracketAdvanceBack(func,x0,h0,plotFlag)
if nargin < 4
plotFlag = 0;
end
if nargin <3
h0 = 0.01;
end
if nargin <2
x0 = 0;
end
if plotFlag == 1
figH = figure();
k = 0;
end
x1 = x0;
h = h0;
x2 = x1 + h;
fx1 = func(x1);
fx2 = func(x2);
%试探
if fx2>=fx1 %说明极小点位于x1的左方,后退搜索,即将步长设定 为负,x1和x2交换
h = -h0;
swap(x1,x2);
swap(fx1,fx2);
end
at = x0;
bt = x2;
iterNum = 1000;
while(iterNum)
h = 2*h;
x3 = x2 + h;
fx3 = func(x3);
ct = x3;
if plotFlag == 1
% pause(1);
plot(x0-300*h0:h0:x0+300*h0,func(x0-300*h0:h0:x0+300*h0),'-b',x1...
,func(x1),'or',x2,func(x2),'og',x3,func(x3),'ob');
print(figH,'-dpng',strcat('plotIm_',num2str(k)));
k = k+1;
end
if fx3>fx2
at = x1;
bt = x2;
ct = x3;
break;
else
x1 = x2;
x2 = x3;
fx2 = fx3;
end
iterNum = iterNum - 1;
end
a = min(at,ct);
b = bt;
c = max(at,ct);
end
function [x,y]=swap(x,y)
t = x;
x = y;
y = t;
end
注:本系列相关matlab代码,对输入的部分异常情况没有进行处理
Numerical recipes 10.1节中提供一种利用三点构建的抛物线极小点进行高低高区间的搜索,这种方法相比传统的进退法在同样的初始条件下,能更快的找到高低高区间,算法如下:
Algorithm 2 抛物线法
function [a,b,c] = bracket(func,a,b,plotFlag,step,steplimit)</
更多推荐
一维搜索方法 matlab,优化方法基础系列
发布评论