漫步最优化二十九——D.S.C.算法

来源:互联网 发布:英语会被取代知乎 编辑:程序博客网 时间:2024/06/03 19:55













——

前面描述的方法要么是搜索,要么是近似,Davies,Swann,Campey发明了一种算法,它结合了搜索法与近似法,用搜索法来确定包含x的范围,而用近似法来生成x的估计值。

对于这种方法,从x的正方向或者反方向估计f(x),直到包含x,然后用二次插值形式来预测x,重复执行这个过程直到达到所求的精度。

算法的输入包括初始点x0,1,初始增长量δ1,常数K以及优化容忍误差ε

在第k次迭代,初始点x0,k与初始增长量δk是可以得到的,我们需要求出下次迭代的x0,k+1,δk+1

初始时刻,估计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的值并计算相应的f(x),直到出现较大的为止。如果这种情况在第n次发生,那么区间[x0,k,xn,k]包含x,相邻的两个区间是呈几何增长的,所以这个过程会产生如下的点序列:

x0,kx1,kx2,kx3,kxn,k=x0,k+δk=x1,k+2δk=x2,k+4δk=xn1,k+2n1δk

如图1所示。显然,最新产生的区间是前者的两倍,并且如果在点

xm,k=xn1,k+2n2δk

处将其分成两个相等的区间,那么我们会得到四个等区间的点。


这里写图片描述
图1

如果计算f(x)在点xm,k处的值,我们能得到
fn2,kfn1,kfm,kfn,kf(xn2,k)f(xn1,k)f(xm,k)f(xn,k)

如果fm,kfn1,k,那么x位于区间[xn2,k,xm,k]中(如图2所示),利用二次插值的结论可得x的估计值为

x0,k+1=xn1,k+2n2δk(fn2,kfm,k)2(fn2,k2fn1,k+fm,k)

同样地,如果fm,k<fn1,k,那么x位于区间[xn1,k,xn,k]中(如图3所示),x的估计值为

x0,k+1=xm,k+2n2δk(fn1,kfn,k)2(fn1,k2fm,k+fn,k)


这里写图片描述
图2

对于第二种情况,x位于反方向,所以x沿着δk,2δk,递减直到定位到f(x)的最小值,这个过程与第一种情况一样,只需要将δk的符号改为负即可。

这里写图片描述
图3

对于第三种情况,x位于x0,kδk,x0,k+δk之间,如果
f1,k=f(x0,kδk)f0,k=f(x0,k)f1,k=f(x0,k+δk)

那么根据二次插值的结论可得x得估计值为

x0,k+1=x0,k+δk(f1,kf1,k)2(f1,k2f0,k+f1,k)

对于第k次迭代,我们重新定义增长量为

δk+1=Kδk

其中K是0到1之间的常数。使用这个常量的动机是随着越来越靠近解,我们会慢慢找到x的小区间,因此需要改变算法的步长,比较合适的K为0.1。

原创粉丝点击