漫步最优化四十一——Powell法(下)












——

对于步骤1, d01,d02,,d0n 为坐标方向。对于步骤2, f(x) 沿着 xk0,xk1,,xkn 最小化。对于步骤3, f(x) 在新的共轭方向最小化,对于凸二维问题来说,该算法搜索模式如图4所示。

Powell算法的主要优点是不需要海森矩阵,更进一步,通过使用基于线搜索的一维算法,梯度也不需要。

但是Powell算法有时候不一定线性无关,这样的话生成的方向集无法生成 En ,即便是凸二次问题也存在这样的情况,如果第二步中最小化 f(xk(j1)+αdkj) 时存在某个 j 使得 αkj=0 ,就会导致这样的情况。这时候步骤三将得到

dk(n+1)=i=1ijnαkidki

即新生成的方向不包含 dkj ,因为 dkj 别舍弃掉了,这样的 n 个方向集合无法张成 En ,这就意味着至少有两个方向是线性相关的,这样的话算法无法收敛到问题的解。

上面的问题可以被避免到,那就是如果出现线性相关,那么下次迭代的话我们不改变方向集,然后得到新的共轭方向。因为下次迭代的时候我们是从新的点 xk 开始的,所以是可能产生新的方向的。


漫步最优化四十一——Powell法(下)_第1张图片
图4

原则上如果至少有一个 αki 为零,那么将产生线性相关。不幸的是,由于计算机精度有限, αki 的值不可能为零,所以检查 αki 不是可靠的方法,接下里介绍一种可替代的方法,依然是Powell得出来的。

如果方向向量 dki,i=1,2,,n 被归一化使得

dTkiHdkifor i=1,2,,n

那么矩阵的行列式

D=[dk1 dk2  dkn]

要想为最大值,那么当且仅当方向 dki 属于共轭集合,所以如果舍弃非共轭方向 d1k 然后将共轭方向 dk(n+1) 加入到 D 中,那么 D 的行列式将会增加。另一方面,如果 dk(n+1) 的加入使得 D 内产生线性相关,那么 D 的行列式将减小。基于这个原则,Powell开发了修正的算法,该算法中使用一个测试来确定新生成的方向是否用于下次迭代,该测试也能识别是否 n 个老方向中的一个用新方向来替代,所以减小了线性相关的风险。

有个非常相似的技术也是用来消除线性相关,该方法由Zangwill提出。从计算上看,该方法比Powell修正更加经济有效,因此很值得详细的介绍一下。

Zangwill的方法是在Powell算法上进行了如下修正。

  • 步骤1中的初始方向选为单位坐标向量集
    D0=[d01 d02  d0n]=100010001

    D0 的行列式 Δ0 为单位1。
  • 步骤2中确定 αki,i=1,2,,n 的方法跟以前一样,然后选出最大的 αki
    αkm=max{αk1,αk2,,αkn}
  • 步骤3中跟以前一样生成新的方向,然后归一化,
    dk(n+1)=1λk(xknxk0)

其中

λk=xknxk0

  • 步骤4不变,步骤5中,用上面得到的新方向代替方向 dkm ,当然前提是这个替换能够保证
    Dk=[dk1 dk2  kn]

的行列式有限且比常数 ε1 大,其中 0<ε11 ,即

0<ε1<Δk=detDk1

否则的话,我们用最近的方向集用于下次迭代。因为

Δk=det[dk1  dk(m1) dkm dk(m+1)  dkn]


dk(n+1)=1λki=1nαkidki

代替了 dkm ,所以

Δk=αkmαkΔk

注意这里补充两个知识点

  • 如果常数乘以一列并加到另一列,那么行列式不变。
  • 如果某列乘以常数,那么行列式同样乘以该常数。
    根据第一个知识点可知 Δk 相加的效果可以消除掉,根据第二个知识点可知需要乘以 αkm/λk 。如果
    αkmλkΔk>ε1

那么我们令

d(k+1)m=dk(n+1)d(k+1)i=dki

其中 i=1,2,,m1,m+1,,n 。否则的话

d(k+1)i=dki

其中 i=1,2,,n 。同时也要更新 Δk

δk+1={αkmλkΔkΔkif αkmλkΔk>ε1otherwise

上面修正得到的结果就是方向矩阵的行列式一直有限且为正,这就表明方向一直是线性无关的。第二项的策略能够确保行列式的值 Δk 尽可能大,从而避免线性相关。

修正的算法称为Zangwill算法,对于凸二次问题来说,该算法能够收敛。

你可能感兴趣的:(漫步最优化)