自从Hollad教授提出基本遗传算法后,针对遗传算法改进的讨论从来没有停止。本文将介绍遗传算法的几种改进方法,分别为自适应遗传算法、混合遗传算法中的模拟退火遗传算法(SAGA)和并行遗传算法。相较于标准(简单)遗传算法(SGA),改进法在某些方面会具有一定的优势。
往期传送门
自适应遗传算法
交叉概率
上式中,
-
fmax ——群体中最大的适应度值 -
favg ——每代群体的平均适应度值 -
f′ ——要交叉的两个个体中较大的适应度值 -
f ——要变异的个体的适应度值
Pc1=0.9 ,Pc2=0.6 ,Pm1=0.1 ,Pm2=0.001 。
模拟退火遗传算法
用模拟退火算法对GA进行改进的具体办法有许多,总结下来有退火思维改进适应度函数、退火式变异(SAM)和退火式选择等方法。
1. 无从考证的Stoffa改进方法
Stoffa借鉴模拟退火的思想2(并没有找到原文,只有未列出参考文献的二手资源),将适应度随迭代的次数拉伸。遗传算法在运行初期个体差异较大,使用轮盘赌选择产生的后代与适应度成正比,可以获得较好的选择效果。但在算法后期,适应度趋于一致,优秀个体优势不足,需要对适应度进行一定的“拉伸”,公式如下:
其中
本方法有一定的可取之处,在“算法后期,适应度趋于一致”的时候,该方法可以拉伸适应度,使遗传算法中的选择更有择优的效果。但该方法只是应用了模拟退火思想中“拉伸”的思想,无法解决早熟问题,并没有将模拟退火算法的爬山能力融入遗传算法中。
2.SAM(退火式变异)
遗传算法有三种明显劣势 3,一是编码所占用的储存空间可能很大(二进制码),二是可能出现早熟,陷入局部最优解,三是爬山能力差。Adler提出一种操作符——退火变异,伪代码如下:
SAM(s, T){
s' = mutate(s);
if (accept(s, s', T)) return s';
else return s;
}
其中的aceept操作为模拟退火中的accept。计算变异后新的适应度与变异前适应度的差值,若变异后适应度更大,则接受变异;若变异后适应度变小,则以一定的退火概率
对于函数
在区间
其中平均遗传代数为64.66次。
在退火初温度
可以发现加入模拟退火变异操作后可以明显提高遗传算法的效率。
3. 另一种改进的遗传退火进化算法
操作流如下:
与上述仅仅将变异或交叉操作符中加入退火思想不同,本方法直接将一部分个体进行退火。