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













——

前面描述的方法要么是搜索,要么是近似,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 <script type="math/tex" id="MathJax-Element-8862">K</script>为0.1。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值