欢迎访问我的个人博客:青山白雪
非线性一维搜索
what?
沿某一已知方向求目标函数的极小点
思想
从某个初始点x(0)出发,沿方向p(0)进行搜索,得到目标值较小的点x(1);然后,从x(1)出发,沿方向p(1)再次进行一维搜索,得到目标函数更小的点x(2);依次进行下去。
在每次迭代寻求x(k+1)时,在确定的搜索方向p(k)上,求一个步长λk,使目标函数下降最多,即f(x(k+1))<f(x(k))。
λk为最优步长因子,每次求解是一个求一元函数的极值问题,即:
f(x(k)+λkp(k))=λminf(x(k)+λp(k))=minφ(λ)
每一次一维搜索就是对函数φ(λ)求极值,极值λ∗就是本次迭代的最优步长。
因此求多元函数f(x)=f(x1,x2,⋯,xn)的极值点问题,转化为一系列沿逐次确定方向求极值点的问题。
这里总结下更简单的形式:
一维函数寻优:
minf(x)x∈[a,b]
基本思想为
- 确定φ(λ)的搜索区间,即:函数极值点所在区间
- 用逐步逼近的方法,确定函数极值点
实施步骤
有初始点x1和步长h,确定搜索区间[a,b]的方法
- 计算f(x1)与f(x1+h)
若f(x1)>f(x1+h),
极小点在试探点右侧,从x1+h出发,步长加倍变为2h计算f(x1+3h),依次仿照此过程迭代……
若f(x1)<f(x1+h),
极小点在试探点左侧,方向错误,步长加负号变为−h,计算f(x1−h).
若f(x1)≤f(x1−h),极小点在x1−h右侧,搜索区间设置为:[x1−h,x1+h]。
若f(x1)>f(x1−h),则从x1−h向左步长加倍搜索,如上。
逐步缩小区间
初始单峰区间为[a,b],任取两点x1<x2,有:
- 若f(x1)<f(x2),则缩小的新区间为[a,x2]
- 若f(x1)>f(x2),则缩小的新区间为[x1,b]
- 若f(x1)=f(x2),则缩小的新区间为[x1,x2]
然后重复迭代。
how?
黄金分割法
又称0.618法。是一种等比例缩短区间的直接搜索方法。
基本思想
比较单峰区间内两点的函数值,不断舍弃单峰区间的左端或者右端的一部分,使区间按固定区间缩小率逐步缩小,直到极小点所在区间满足给定误差范围,得到近似最优解。
关键是:如何保证区间缩小率不变?
分析
在区间[a,b]上选择两点x1,x2,满足:
x1=a+λ(b−a)x2=b−λ(b−a)
即:位置对称!
再次寻找新的选取点x3时,也要求与保留点对称。
不妨假设初始区间[a,b]长度为1,并且f(x1)<f(x2),则保留下的区间为:[a,x2],长度为λ。
在下一轮迭代中,x1记为新的点x2′,位置在原区间的(1−λ),新插入的点x1′位置应该在λ(1−λ)。
由相同的比例条件,得:
1λ=λ1−λ
可解得:λ=25−1≈0.618 。
示意图:

算法流程
(1)给出初始搜索空间[a,b],收敛精度ε,令λ=0.618
(2)计算x1,x2 以及对应的f(x1),f(x2)
(3)比较f(x1),f(x2)的大小,缩小搜索区间
(4)检查区间是否足够小或者函数值收敛到足够接近,若不满足,进行(5),否则,进行(6)
(5)保留区间及一个点,计算新的试探点及其相应的函数值,进行(3)
(6)取最后两个试探点的平均值作为极小点的近似值,并计算该点的函数值作为目标函数的最优解
局限:算法收敛较慢,并且信息浪费,计算试探点的函数值仅仅比较大小!
牛顿法
插值法基本思想
利用几个探索点的函数值或者一阶导数值,产生一个二次或者三次的多项式逼近目标函数,然后用多项式的极小点逼近函数的极小点。
牛顿法的基本思想是将非线性方程f(x)=0 线性化,利用函数值及其一二阶导数,推导出收敛到根x∗的收敛序列{xk}。
算法分析
初始值x0处泰勒展开:
f(x)=f(x0)+f′(x0)(x−x0)+2!f′′(ξ)(x−x0)2
若f(x∗)=0,则,函数在零点估计值xk邻域的一阶展开式为:
f(x∗)≈f(x(k))+f′(x(k))(x∗−x(k))
计算可得x∗的近似表达式:
x∗≈x(k)−f′(x(k))f(x(k))
每一次迭代只得到x∗的估计值x(k+1),于是可得迭代表达式:
x(k+1)=x(k)−αf′(x(k))f(x(k))k=0,1,2⋯
α 称为搜索因子,可保证算法收敛,或者调整收敛速度,常取值为1。
示意图:

算法流程
(1)选区间[a,b],使得f(a)f(b)<0,且∀x∈[a,b],f′(x)=0
(2)给定初始估计值和误差
(3)计算f(x(k))与f′(x(k))
(4)检验是否收敛,即∣f(x(k))∣≤ε是否成立,或者两个近似点满足收敛条件,则x∗=x(k)。计算结束。否则,继续。
(5)计算x(k+1)=x(k)−αf′(x(k))f(x(k))
(6)返回(3)
收敛较快,但是迭代收敛性依赖初始点的选择,且计算工作量较大。
抛物线法
与牛顿法 的迭代公式不同:
x(k)=2BA
其中:
A=((x(k−1))2−(x(k−2))2)f(x(k−3))+((x(k−3))2−(x(k−1))2)f(x(k−2))+((x(k−2))2−(x(k−3))2)f(x(k−1))B=((x(k−1))−(x(k−2)))f(x(k−3))+((x(k−3))−(x(k−1)))f(x(k−2))+((x(k−2))−(x(k−3)))f(x(k−1))
小结
介绍了黄金分割法、牛顿法、抛物线法。当函数有比较好的解析性质时,牛顿法与抛物线法一般比0.618法的效果好。