未来的你已在我的身边,
虽然经过了很多个弯;
现在的我已经没了号码牌,
虽然已经相伴了很多年。
遇见你,是我最美的意外。
——畅宝宝的傻逼哥哥
大部分算法计算效率是有很大差别的,高效或者快速的算法仅需要少量的迭代就能收敛到解,并且计算量也很小。从经济的角度来说,我们会选择选择最有效的算法,因此我们就需要度量算法收敛速率的定量指标或准则。
最基本的准则是序列的收敛阶,如果
{xk}∞k=0
是实数序列,那么它的收敛阶就是最大的非负整数
p
,满足关系
其中
x̂ 是 k→∞ 的极限,参数 β 称为收敛比。
例1: 如果
- xk=γk, for 0<γ<1
- xk=γ2k, for 0<γ<1
那么求出序列 {xk}∞k=0 的收敛阶与收敛比。
解:
(a)因为
x̂ =0
,所以
对于
p=0,1,2
,我们有
β=0,γ,∞
,所以
p=1,β=γ
。
(b)
对于 p=0,1,2,3 ,我们有 β=0,0,1,∞ ,所以 p=2,β=1 。
如果等式(1)的极限存在,那么
其中
ε<1
,所以
所以
p
增加或者
与
第二个序列的收敛速率比第一个更快。
如果 p=1,β<1 ,那么我们称序列是线性收敛的;如果 p=1,β=0 或者 p≥2 ,那么称序列是超线性收敛的。
大部分非线性规划算法都是线性收敛的,因此他们的比较都是基于 β 值。
另一种度量序列收敛速率的是平均收敛阶数,也就是满足关系
的最小非负整数。如果不存在 p>0 ,那么收敛的阶数为无穷大。
例2: 找出序列 {xk}∞k=0 的平均收敛阶数
- xk=γk, for 0<γ<1
- xk=γ2k, for 0<γ<1
解:
(a)因为
x̂ =0
,
所以对于 p=0,1,2 ,我们有 ρ=0,1,1 ,因此 p=1 。
(b)
所以对于 p=0,1,2,3 ,我们有 ρ=0,ρ,1,1 ,因此 p=2 。
如果收敛的平均阶数是单位1,那么我们称序列是平均线性收敛,平均线性收敛定义为
上面的讨论中,我们考虑的是数列的收敛性。随着越来越靠近解,这样的序列可能由目标函数的值构成,这时候我们度量目标函数靠近其最小值的速度。或者说,如果我们想知道问题靠近最优解有多快,可以用向量 xk−x̂ 的长度或长度的平方,即 ∥xk−x̂ ∥ 或者 ∥xk−x̂ ∥2 。
上面收敛速率的度量中,重点都是在解邻域内考虑算法的有效性。通常而言优化的大部分计算都花在解的邻域内,所以上面的度量是很有意义的。然而偶尔会有些算法在解的邻域内有效而其他地方无效。这时候上面的判别准则会误导我们,所以需要改用其他的准则。