你是我的小公主,
像宠你宠你宠你。
你是我的小公主,
我的天空是晴是雨是彩虹,
受到了你的操控。
你是我的小公主,
让幸福不再是幻想,
而是实实在在的感受。
你是我的小公主,
我愿做你的青蛙王子,
呱呱呱。
——畅宝宝的傻逼哥哥
前面描述的方法要么是搜索,要么是近似,Davies,Swann,Campey发明了一种算法,它结合了搜索法与近似法,用搜索法来确定包含 x∗ 的范围,而用近似法来生成 x∗ 的估计值。
对于这种方法,从
x
的正方向或者反方向估计
算法的输入包括初始点
x0,1
,初始增长量
δ1
,常数
K
以及优化容忍误差
在第
k
次迭代,初始点
初始时刻,估计 f(x) 在点 x0,k−δk,x0,k,x0,k+δk 处的值,会有三种可能的情况,即
- f(x0,k−δk)>f(x0,k)>f(x0,k+δk)
- f(x0,k−δk)<f(x0,k)<f(x0,k+δk)
- f(x0,k−δk)≥f(x0,k)≤f(x0,k+δk)
对于第一种情况,
f(x)
的最小值位于正方向,所以增加
x
的值并计算相应的
如图1所示。显然,最新产生的区间是前者的两倍,并且如果在点
处将其分成两个相等的区间,那么我们会得到四个等区间的点。
图1
如果计算 f(x) 在点 xm,k 处的值,我们能得到
如果
fm,k≥fn−1,k
,那么
x∗
位于区间
[xn−2,k,xm,k]
中(如图2所示),利用二次插值的结论可得
x∗
的估计值为
同样地,如果
fm,k<fn−1,k
,那么
x∗
位于区间
[xn−1,k,xn,k]
中(如图3所示),
x∗
的估计值为
图2
对于第二种情况, x∗ 位于反方向,所以 x 沿着
图3
对于第三种情况, x∗ 位于 x0,k−δk,x0,k+δk 之间,如果
那么根据二次插值的结论可得
x∗
得估计值为
对于第
k
次迭代,我们重新定义增长量为
其中
K
是0到1之间的常数。使用这个常量的动机是随着越来越靠近解,我们会慢慢找到