非线性一维搜索

本文详细介绍了非线性一维搜索的三种方法:黄金分割法、牛顿法和抛物线法。黄金分割法通过固定比例缩小搜索区间寻找极值;牛顿法利用泰勒展开线性化目标函数,通过一阶导数迭代逼近极小点;抛物线法则结合前几次迭代的函数值构建抛物线模型,以提高收敛速度。每种方法各有优缺点,适用于不同的问题场景。
摘要由CSDN通过智能技术生成

欢迎访问我的个人博客:青山白雪

非线性一维搜索

what?

沿某一已知方向求目标函数的极小点

思想

从某个初始点 x ( 0 ) x^{(0)} x(0)出发,沿方向 p ( 0 ) p^{(0)} p(0)进行搜索,得到目标值较小的点 x ( 1 ) x^{(1)} x(1);然后,从 x ( 1 ) x^{(1)} x(1)出发,沿方向 p ( 1 ) p^{(1)} p(1)再次进行一维搜索,得到目标函数更小的点 x ( 2 ) x^{(2)} x(2);依次进行下去。

在每次迭代寻求 x ( k + 1 ) x^{(k+1)} x(k+1)时,在确定的搜索方向 p ( k ) p^{(k)} p(k)上,求一个步长 λ k \lambda _k λk,使目标函数下降最多,即 f ( x ( k + 1 ) ) < f ( x ( k ) ) f(x^{(k+1)}) < f(x^{(k)}) f(x(k+1))<f(x(k))

λ k \lambda _k λk为最优步长因子,每次求解是一个求一元函数的极值问题,即:
f ( x ( k ) + λ k p ( k ) ) = min ⁡ λ f ( x ( k ) + λ p ( k ) ) = m i n φ ( λ ) f(x^{(k)} + \lambda _k p^{(k)}) = \displaystyle \min_{\lambda} f(x^{(k)} + \lambda p^{(k)}) = min \varphi(\lambda) f(x(k)+λkp(k))=λminf(x(k)+λp(k))=minφ(λ)
每一次一维搜索就是对函数 φ ( λ ) \varphi(\lambda) φ(λ)求极值,极值 λ ∗ \lambda^* λ就是本次迭代的最优步长。

因此求多元函数 f ( x ) = f ( x 1 , x 2 , ⋯   , x n ) f(x) = f(x_1,x_2, \cdots, x_n) f(x)=f(x1,x2,,xn)的极值点问题,转化为一系列沿逐次确定方向求极值点的问题。

这里总结下更简单的形式:

一维函数寻优:
m i n f ( x ) x ∈ [ a , b ] min f(x) \qquad x \in [a,b] minf(x)x[a,b]
基本思想为

  1. 确定 φ ( λ ) \varphi(\lambda) φ(λ)的搜索区间,即:函数极值点所在区间
  2. 用逐步逼近的方法,确定函数极值点

实施步骤

有初始点 x 1 x_1 x1和步长 h h h,确定搜索区间 [ a , b ] [a,b] [a,b]的方法

  1. 计算 f ( x 1 ) f(x_1) f(x1) f ( x 1 + h ) f(x_1 + h) f(x1+h)

f ( x 1 ) > f ( x 1 + h ) f(x_1) > f(x_1 + h) f(x1)>f(x1+h)

​ 极小点在试探点右侧,从 x 1 + h x_1+h x1+h出发,步长加倍变为 2 h 2h 2h计算 f ( x 1 + 3 h ) f(x_1+3h) f(x1+3h),依次仿照此过程迭代……

f ( x 1 ) < f ( x 1 + h ) f(x_1) < f(x_1 + h) f(x1)<f(x1+h)

​ 极小点在试探点左侧,方向错误,步长加负号变为 − h -h h,计算 f ( x 1 − h ) f(x_1 -h) f(x1h).

​ 若 f ( x 1 ) ≤ f ( x 1 − h ) f(x_1) \le f(x_1 - h) f(x1)f(x1h),极小点在 x 1 − h x_1 - h x1h右侧,搜索区间设置为: [ x 1 − h , x 1 + h ] [x_1 - h, x_1 + h] [x1h,x1+h]

​ 若 f ( x 1 ) > f ( x 1 − h ) f(x_1) > f(x_1 - h) f(x1)>f(x1h),则从 x 1 − h x_1 -h x1h向左步长加倍搜索,如上。

逐步缩小区间

初始单峰区间为 [ a , b ] [a,b] [a,b],任取两点 x 1 < x 2 x_1 < x_2 x1<x2,有:

  1. f ( x 1 ) < f ( x 2 ) f(x_1) < f(x_2) f(x1)<f(x2),则缩小的新区间为 [ a , x 2 ] [a,x_2] [a,x2]
  2. f ( x 1 ) > f ( x 2 ) f(x_1) > f(x_2) f(x1)>f(x2),则缩小的新区间为 [ x 1 , b ] [x_1,b] [x1b]
  3. f ( x 1 ) = f ( x 2 ) f(x_1) = f(x_2) f(x1)=f(x2),则缩小的新区间为 [ x 1 , x 2 ] [x_1,x_2] [x1x2]

然后重复迭代。

how?

黄金分割法

又称0.618法。是一种等比例缩短区间的直接搜索方法。

基本思想

比较单峰区间内两点的函数值,不断舍弃单峰区间的左端或者右端的一部分,使区间按固定区间缩小率逐步缩小,直到极小点所在区间满足给定误差范围,得到近似最优解。

关键是:如何保证区间缩小率不变?

分析

在区间 [ a , b ] [a,b] [a,b]上选择两点 x 1 , x 2 x_1, x_2 x1,x2,满足:
x 1 = a + λ ( b − a ) x 2 = b − λ ( b − a ) x_1 = a + \lambda (b - a) \\ x_2 = b - \lambda (b - a) x1=a+λ(ba)x2=bλ(ba)
即:位置对称!

再次寻找新的选取点 x 3 x_3 x3时,也要求与保留点对称。

不妨假设初始区间 [ a , b ] [a,b] [a,b]长度为1,并且 f ( x 1 ) < f ( x 2 ) f(x_1) < f(x_2) f(x1)<f(x2),则保留下的区间为: [ a , x 2 ] [a,x_2] [a,x2],长度为 λ \lambda λ

在下一轮迭代中, x 1 x_1 x1记为新的点 x 2 ′ x_2' x2,位置在原区间的 ( 1 − λ ) (1 - \lambda) (1λ),新插入的点 x 1 ′ x_1' x1位置应该在 λ ( 1 − λ ) \lambda (1 - \lambda) λ(1λ)

由相同的比例条件,得:
λ 1 = 1 − λ λ \frac{\lambda}{1} = \frac{1 - \lambda}{\lambda} 1λ=λ1λ
可解得: λ = 5 − 1 2 ≈ 0.618 \lambda = \frac{\sqrt{5} - 1}{2} \approx 0.618 λ=25 10.618

示意图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihsysN6T-1590423571412)(I:\note\最优化\非线性一维搜索.assets\image-20200525231636889.png)]

算法流程

(1)给出初始搜索空间 [ a , b ] [a,b] [a,b],收敛精度 ε \varepsilon ε,令 λ = 0.618 \lambda = 0.618 λ=0.618

(2)计算 x 1 , x 2 x_1, x_2 x1,x2 以及对应的 f ( x 1 ) , f ( x 2 ) f(x_1), f(x_2) f(x1),f(x2)

(3)比较 f ( x 1 ) , f ( x 2 ) f(x_1),f(x_2) f(x1),f(x2)的大小,缩小搜索区间

(4)检查区间是否足够小或者函数值收敛到足够接近,若不满足,进行(5),否则,进行(6)

(5)保留区间及一个点,计算新的试探点及其相应的函数值,进行(3)

(6)取最后两个试探点的平均值作为极小点的近似值,并计算该点的函数值作为目标函数的最优解

局限:算法收敛较慢,并且信息浪费,计算试探点的函数值仅仅比较大小!

牛顿法

插值法基本思想

利用几个探索点的函数值或者一阶导数值,产生一个二次或者三次的多项式逼近目标函数,然后用多项式的极小点逼近函数的极小点。

牛顿法的基本思想是将非线性方程 f ( x ) = 0 f(x) = 0 f(x)=0 线性化,利用函数值及其一二阶导数,推导出收敛到根 x ∗ x^* x的收敛序列 { x k } \{x^{k}\} {xk}

算法分析

初始值 x 0 x_0 x0处泰勒展开:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + f ′ ′ ( ξ ) 2 ! ( x − x 0 ) 2 f(x) = f(x_0) + f'(x_0) (x - x_0) + \frac{f''(\xi)}{2!}(x - x_0)^2 f(x)=f(x0)+f(x0)(xx0)+2!f(ξ)(xx0)2
f ( x ∗ ) = 0 f(x^*) = 0 f(x)=0,则,函数在零点估计值 x k x_k xk邻域的一阶展开式为:
f ( x ∗ ) ≈ f ( x ( k ) ) + f ′ ( x ( k ) ) ( x ∗ − x ( k ) ) f(x^*) \approx f(x^{(k)}) + f'(x^{(k)})(x^* - x^{(k)}) f(x)f(x(k))+f(x(k))(xx(k))
计算可得 x ∗ x^* x的近似表达式:
x ∗ ≈ x ( k ) − f ( x ( k ) ) f ′ ( x ( k ) ) x^* \approx x^{(k)} - \frac{f(x^{(k)})}{f'(x^{(k)})} xx(k)f(x(k))f(x(k))
每一次迭代只得到 x ∗ x^* x的估计值 x ( k + 1 ) x^{(k + 1)} x(k+1),于是可得迭代表达式:
x ( k + 1 ) = x ( k ) − α f ( x ( k ) ) f ′ ( x ( k ) ) k = 0 , 1 , 2 ⋯ x^{(k + 1)} = x^{(k)} - \alpha \frac{f(x^{(k)})}{f'(x^{(k)})} \qquad k = 0, 1, 2 \cdots x(k+1)=x(k)αf(x(k))f(x(k))k=0,1,2
α \alpha α 称为搜索因子,可保证算法收敛,或者调整收敛速度,常取值为1。

示意图:

在这里插入图片描述

算法流程

(1)选区间 [ a , b ] [a,b] [a,b],使得 f ( a ) f ( b ) < 0 f(a)f(b) < 0 f(a)f(b)<0,且 ∀ x ∈ [ a , b ] , f ′ ( x ) ≠ 0 \forall x \in [a,b],f'(x) \ne 0 x[a,b],f(x)=0

(2)给定初始估计值和误差

(3)计算 f ( x ( k ) ) f(x^{(k)}) f(x(k)) f ′ ( x ( k ) ) f'(x^{(k)}) f(x(k))

(4)检验是否收敛,即 ∣ f ( x ( k ) ) ∣ ≤ ε |f(x^{(k)})| \leq \varepsilon f(x(k))ε是否成立,或者两个近似点满足收敛条件,则 x ∗ = x ( k ) x^* = x^{(k)} x=x(k)。计算结束。否则,继续。

(5)计算 x ( k + 1 ) = x ( k ) − α f ( x ( k ) ) f ′ ( x ( k ) ) x ^ {(k + 1)} = x ^ {(k)} - \alpha \frac{f(x ^ {(k)})}{f'(x^{(k)})} x(k+1)=x(k)αf(x(k))f(x(k))

(6)返回(3)

收敛较快,但是迭代收敛性依赖初始点的选择,且计算工作量较大。

抛物线法

与牛顿法 的迭代公式不同:
x ( k ) = A 2 B x ^ {(k)} = \frac{A}{2B} 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 ) ) 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)}) A=((x(k1))2(x(k2))2)f(x(k3))+((x(k3))2(x(k1))2)f(x(k2))+((x(k2))2(x(k3))2)f(x(k1))B=((x(k1))(x(k2)))f(x(k3))+((x(k3))(x(k1)))f(x(k2))+((x(k2))(x(k3)))f(x(k1))

小结

介绍了黄金分割法、牛顿法、抛物线法。当函数有比较好的解析性质时,牛顿法与抛物线法一般比0.618法的效果好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值