你喜欢有小情绪,
像夜晚的月亮,
但各有各的精彩。
你情感丰富,
时常给我惊喜,
我像探秘一样,
对你的一切都充满好奇。
想系好安全带,
带你去世界各个地方,
都留下我们的小脚印与美好的回忆。
——畅宝宝的傻逼哥哥
考虑一个单峰函数,在区间[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