白天与黑夜,
希望陪你共同走过。
整夜的美梦,
希望抱你一起回味。
即便我是铁石心肠,
那也抵不过你一声哥哥,
抵不过你钻进我的胸膛。
你就是我口中的一块糖,
只想对你说:
I LOVE YOU
——畅宝宝的傻逼哥哥
考虑不确定区间
并且假设两点xa,k,xb,k均位于Ik中,如图1所示,对于f(x)在点xa,k,xb,k处的值f(xa,k),f(xb,k),如果f(xa,k)<f(xb,k),那么我们选择左区间
如果f(xa,k)>f(xb,k),那么我们选择右区间
如果
那么可以选择IRk+1,ILk+1中的任何一个。如果右区间IRk+1被选中,那么它将包含最小值,另外还知道点xb,k处的函数值。如果我们知道点xb,k+1处的值,那么我们就有充分的信息来进一步减小不确定区域,然后不断重复此过程。这种方法每次迭代只需要估计一个函数值,计算量相对于二分搜索要小。
根据图1可知
为了方便,我们假设区间相等,那么
由此可得
如果上面的过程重复多次,那么我们会得到如下的区间序列{I1,I2,…,In}:
图1
上面的n个等式中,有
假设n+2次迭代后区间消失,即In+2=0,那么我们就得到斐波那契序列,如果我们令k=n,可以得到
所生成的序列
就是著名的斐波那契数列,它可以由递归关系
得出,其中F0=F1=1。将其应用到一维优化上就得到斐波那契搜索法,当n=6,I1=100时,该方法得出的结果如图2所示。
如果迭代的总数为n,那么斐波那契搜索将不确定区间缩小到
例如如果n=11,那么Fn=144,这样的话In将缩小到不足I1的1\%,其中会有11次迭代。因为每次迭代只需要一个函数估计值,所以一共需要11个函数估计值,如果二分搜索要达到同样的精度需要14个函数估计值,故斐波那契搜索比二分搜索效率更高。事实上,相对于其他几个搜索方法,从计算效率上看它是最高效的。
如果n是已知的,那么我们可以得到唯一的斐波那契区间序列。如果我们的目标是在给定的误差下找到
我们可以用上面的原则来实现斐波那契搜索。我们假设最小值的初始边界为
图2
在k次迭代后,
然后依次进行。
如果fa,k>fb,k,那么x∗位于区间[xa,k,xU,k]中,所以x∗的新边界更新为
同样的,新区间的两个内点xa,k+1,xb,k+1将会是xb,k,xL,k+1+Ik+2,因此我们令
如图3所示,fb,k的值作为f(x)在点xa,k+1处的值,f(x)在点xb,k+1处计算如下:
图3
另一方面,如果fa,k<fb,k,那么x∗在区间[xL,k,xb,k]中,这时候
并且计算
如图4所示。对于fa,k=fb,k,上面两种情况均可以,因为x∗同时包含在[xL,k,xb,k],[xa,k,xU,k]。
图4
上面的过程重复执行,直到k=n−2,此时
且
如图5所示。显然,可以确定最小值在容忍误差±1/Fn范围内。
如果n足够大,那噩梦
图5