Powell算法的主要优点是不需要海森矩阵,更进一步,通过使用基于线搜索的一维算法,梯度也不需要。
但是Powell算法有时候不一定线性无关,这样的话生成的方向集无法生成 En ,即便是凸二次问题也存在这样的情况,如果第二步中最小化 f(xk(j−1)+αdkj) 时存在某个 j 使得 αkj=0 ,就会导致这样的情况。这时候步骤三将得到
即新生成的方向不包含 dkj ,因为 dkj 别舍弃掉了,这样的 n 个方向集合无法张成 En ,这就意味着至少有两个方向是线性相关的,这样的话算法无法收敛到问题的解。
上面的问题可以被避免到,那就是如果出现线性相关,那么下次迭代的话我们不改变方向集,然后得到新的共轭方向。因为下次迭代的时候我们是从新的点 xk 开始的,所以是可能产生新的方向的。
如果方向向量 dki,i=1,2,…,n 被归一化使得
那么矩阵的行列式
要想为最大值,那么当且仅当方向 dki 属于共轭集合,所以如果舍弃非共轭方向 d1k 然后将共轭方向 dk(n+1) 加入到 D 中,那么 D 的行列式将会增加。另一方面,如果 dk(n+1) 的加入使得 D 内产生线性相关,那么 D 的行列式将减小。基于这个原则,Powell开发了修正的算法,该算法中使用一个测试来确定新生成的方向是否用于下次迭代,该测试也能识别是否 n 个老方向中的一个用新方向来替代,所以减小了线性相关的风险。
有个非常相似的技术也是用来消除线性相关,该方法由Zangwill提出。从计算上看,该方法比Powell修正更加经济有效,因此很值得详细的介绍一下。
Zangwill的方法是在Powell算法上进行了如下修正。
其中
的行列式有限且比常数 ε1 大,其中 0<ε1≤1 ,即
否则的话,我们用最近的方向集用于下次迭代。因为
且
代替了 dkm ,所以
注意这里补充两个知识点
那么我们令
其中 i=1,2,…,m−1,m+1,…,n 。否则的话
其中 i=1,2,…,n 。同时也要更新 Δk
上面修正得到的结果就是方向矩阵的行列式一直有限且为正,这就表明方向一直是线性无关的。第二项的策略能够确保行列式的值 Δk 尽可能大,从而避免线性相关。
修正的算法称为Zangwill算法,对于凸二次问题来说,该算法能够收敛。