迭代算法必须收敛,所产生的极小化序列Xk具有这样的性质:或者序列中的某一点就是极小点X∗;或者序列收敛于极小点X∗,即满足


limk→∞∥Xk−X∗∥=0



但求解非线性最优化问题时,通常迭代序点序列收敛于全局最优解相当困难,如,求解函数f(x)=|x|的极小值,显然x=0是唯一极小点,构造极小化序列:


xk+1={12(xk−1)+1,xk>1,12xk,xk≤1.



容易证明这是一个下降序列。若取初始点x0>1,则所有xk>1,因此迭代序列不可能收敛到极小点;但若取初始点x0≤1,则极小化序列会收敛到极小点0.


若当初始点充分靠近极小点产生的迭代序列才能收敛到X∗的算法,称为局部收敛算法;如果任意初始点产生的迭代序列都能收敛到X∗,则称为全局收敛算法。


因为利用迭代优化问题时,其最优解X∗是未知的,所知道的只有每次计算的迭代点Xk,因此,只能从已知迭代点所提供的信息来判断是否应该迭代结束,常用的终止条件有:

  1. 两次迭代绝对误差
    可行域内:∥Xk+1−Xk∥≤ϵ1;
    函数阈值:∥f(Xk+1−f(Xk)∥≤ϵ2.
  2. 两次迭代相对误差
    可行域内:∥Xk+1−Xk∥∥Xk∥≤ϵ1
    函数阈值:∥f(Xk+1−f(Xk)∥f(Xk)≤ϵ2.
  3. 梯度模足够小 ∥Δf(Xk+1)∥≤ϵ
    注:以上ϵi为预先给定的充分小正数,对于定义域上的凸函数,梯度模足够小的终止条件是完全正确的,但是如果是非凸函数,则可能导致误把驻点当作最优点。

2.收敛速度

满足前面迭代终止条件的算法,称为实用收敛性算法,与之对应的还有一类理论收敛性算法。此外,判断算法的好坏,一看是否收敛,而看收敛速度。如果算法产生的迭代序列虽然收敛到最优解,但收敛速度太慢,以致在允许的时间内得不到满意结果,那么这类算法也谈不上好算法。能以较快速度收敛于最优解的算法,才是好算法。

定义:由算法A产生的迭代序列{Xk}收敛于X∗,即limk→∞∥Xk−X∗∥=0,若


limk→∞∥Xk+1−X∗∥∥Xk−X∗∥=β



存在,则:

  1. 当β=0时,称{XK}具体超线性收敛速度或算法A为超线性收敛;
  2. 当0<β<1时,称{Xk}具有线性收敛速度,或算法A为线性收敛;
  3. 当β=1时,称{Xk}具有次线性收敛速度或算法A为次线性收敛。

定义:由算法A产生迭代序列{XK}收敛于X∗,若存在某个实数α>0,有


limk→∞∥Xk+1−X∗∥∥Xk−X∗∥α=β



则称算法是α收敛的,或称算法A所产生的迭代序列{Xk}具有α阶收敛速度。α=1,称算法A为一阶收敛,α=2时为二阶收敛,一般α>1时都称为好算法。

需要说明的是,说一个算法是线性收敛的,是指算法产生的跌打序列在最坏的情况下是线性收敛的,收敛性和收敛速度的理论结果并不一定保证在实际运用时一定有好的计算过程和结果,原因是,一方面,理论分析忽略了计算过程中一些环节的影响,比如数值舍入精度;另一方面,理论分析通常要对函数加一些不容易验证的特殊限定,而这些限定在实际中不一定能得到满足。