你喜欢有小情绪,
像夜晚的月亮,
但各有各的精彩。
你情感丰富,
时常给我惊喜,
我像探秘一样,
对你的一切都充满好奇。
想系好安全带,
带你去世界各个地方,
都留下我们的小脚印与美好的回忆。
——畅宝宝的傻逼哥哥
考虑一个单峰函数,在区间 [xL,xU] 内有最小值,这个区间称为不确定范围,通过不断缩小这个不确定范围可以得出 f(x) 的最小值 x∗ 。在搜索方法中,使用 f(x) 在合适点处的值就能确定出来。
如果 f(x) 在点 xa 处的值是已知的,其中 xL<xa<xU ,那么点 x∗ 可能在 xL 与 xa 之间,或者 xa 与 xU 之间,如图1所示,因此获得信息不足以进一步缩小不确定范围。然而,如果我们知道 f(x) 在两个点 xa,xb 处的值,那就可以缩小了,这时候会有三种情况:
- f(xa)<f(xb)
- f(xa)>f(xb)
- f(xa)=f(xb)
对于第一种情况,
x∗
的范围可能是
xL<x∗<xa
或者
xa<x∗<xb
,即
xL<x∗<xb
,如图1所示。
xb<x∗<xU
的情况被排除了,否则的话
f(x)
会有两个极小值:一个在
xb
的左边,一个在
xb
的右边。同样的,对于第二种情况,我们肯定有
xa<x∗<xU
,如图2所示。对于第三种情况,我们有
xa<x∗<xb
,即不等式
xL<x∗<xb
与
xa<x∗<xU
都满足,如图3所示。
图1
图2
一种缩小不确定范围的基本策略是二分搜索。对于这个方法,首先计算 f(x) 在两点 xa=x1−ε/2 与 xb=x1+ε/2 的值,其中 ε 是很小的正数,然后根据 f(xa)<f(xb) 还是 f(xa)>f(xb) ,判断范围是 xL 到 x1+ε/2 还是 x1−ε/2 到 xU ,如果 f(xa)=f(xb) ,那么两者都可以。假设 x1−xL=xU−x1 ,即 x1=(xL+xU)/2 ,那么不确定范围立刻减半,不断重复这个过程直到满足要求为止。例如,如果二分查找应用到图4所示的函数上,那么不确定范围在四次迭代后从 0<x∗<1 减小到 9/16+ε/2<x∗<5/8−ε/2 。
图3
图4