一般的启发式算法非常容易产生局部最优,或者说根本无法查证产生的最优解是否是全局的。这是因为对于大型系统或复杂的问题,一般的算法都着眼于从局部展开求解,以减少计算量和算法复杂度1。
通常我们希望得到的是全局最优解,但当问题的复杂度过高、考虑的因素和处理的信息量过大时,考虑到成本、效率等问题,我们可能更倾向于局部最优解。
对局部最优的避免有两个根本方法1:
深入研究问题的机理,对问题的机理研究的越透彻,就能更准确的找到全局最优,或划定全局最优可能的区域;
随机搜索,对机理不明的问题,解的搜索越随机陷入局部最优的可能性就越小。
对于已经陷入局部最优,或怀疑陷入局部最优的情况,一般是采取“跳出”或“重启”两种手段,也就是在当前解的基础上向其他方向搜索,或者无视当前解并在新的区域重新搜索。
简单来说,避免陷入局部最优的方法就是随机。在具体实现手段上, 可以根据所采用的启发式框架来灵活加入随机性,实际原则如下2:
越随机越好。没有随机性, 一定会陷入局部最优。为了获得找到最优解的更大期望值, 算法中一定要有足够的随机性。具体体现为鲁棒性较好, 搜索时多样性较好。算法的每一步选择都可以考虑加入随机性, 但要控制一定的概率。
越不随机越好。随机性往往是对问题内在规律的一种变相利用, 即在没有找到其内在规律的情况下, 为了获得更好的多样性, 可选择加入随机的策略。当然, 对给定问题的深入研究才是解决的根本, 也就是要分辨出哪些时候, 某个动作就是客观上能严格保证最优的, 而这一点将直接决定了算法性能。
二者平衡最好。通常情况下, 做好第一点, 可以略微改善算法性能;做好第二点, 则有可能给算法带来质的提高。但二者间调和后的平衡则会带来综合性的飞跃.
在已有最优解上进行大步长变异,有助于算法局部最优解的逃逸!
随机算子:
①轮盘赌
②高斯变异:局部搜索能力较好,但引导个体跳出局部较优解的能力较弱,不利于全局收敛,可用于保证进化后期的收敛速度。原理如下:
X
n
e
w
b
e
s
t
=
X
b
e
s
t
[
1
+
C
a
u
c
h
y
(
0
,
1
)
]
{X_{newbest}} = {X_{best}}[1 + Cauchy(0,1)]
Xnewbest?=Xbest?[1+Cauchy(0,1)]
③柯西变异3:相比高斯变异会产生较大的变异步长,能有效的保持种群多样性,故会使得算法具有较好的全局搜索能力。原理如下:
X
n
e
w
b
e
s
t
=
X
b
e
s
t
[
1
+
G
a
u
s
s
i
a
n
(
0
,
1
)
]
{X_{newbest}} = {X_{best}}[1 + Gaussian(0,1)]
Xnewbest?=Xbest?[1+Gaussian(0,1)]
④混沌变异:与高斯变异等随机变异算子具有相似的搜索能力
⑤柯西+高斯变异
⑥柯西+混沌变异
局部最优解的判断很难实现,多数算法都存在该问题,如果差异较大,则可能为局部最优解!既然很难判断,那么也就很难实现局部最优解的避免,因此我们要做的是可以在其陷入局部最优时设计一种策略使其逃逸局部最优!