遗传算法(二)改进:自适应、遗传退火算法

自从Hollad教授提出基本遗传算法后,针对遗传算法改进的讨论从来没有停止。本文将介绍遗传算法的几种改进方法,分别为自适应遗传算法、混合遗传算法中的模拟退火遗传算法(SAGA)和并行遗传算法。相较于标准(简单)遗传算法(SGA),改进法在某些方面会具有一定的优势。

往期传送门


自适应遗传算法

交叉概率 Pc 和变异概率 Pm 对遗传算法性能有很大的影响,直接影响算法收敛性1。虽然 Pc 较大的时候种群更容易产生新个体,但是当其变大时,优良个体在种群中保留率也降低。对 Pm 来说,若其过大则本算法相当于普通的随机算法,失去了遗传算法的意义。本文直接给出Srinvivas提出的自适应遗传算法(Adaptive GA, AGA)方法:

Pc=Pc1(Pc1Pc2)(ffavg)fmaxfavg,Pc1,ffavgf<favg

Pm=Pm1(Pm1Pm2)(fmaxf)fmaxfavg,Pm1,ffavgf<favg

上式中,

  • fmax ——群体中最大的适应度值
  • favg ——每代群体的平均适应度值
  • f ——要交叉的两个个体中较大的适应度值
  • f ——要变异的个体的适应度值
    Pc1=0.9 Pc2=0.6 Pm1=0.1 Pm2=0.001

模拟退火遗传算法

用模拟退火算法对GA进行改进的具体办法有许多,总结下来有退火思维改进适应度函数、退火式变异(SAM)和退火式选择等方法。

1. 无从考证的Stoffa改进方法

Stoffa借鉴模拟退火的思想2(并没有找到原文,只有未列出参考文献的二手资源),将适应度随迭代的次数拉伸。遗传算法在运行初期个体差异较大,使用轮盘赌选择产生的后代与适应度成正比,可以获得较好的选择效果。但在算法后期,适应度趋于一致,优秀个体优势不足,需要对适应度进行一定的“拉伸”,公式如下:

fi=efi/TMi=1efi/T

T=T0(0.99g1)

其中 fi 为第 i 个个体的适应度, M 为种群大小, g 为遗传代数, T 为温度, T0 为初始温度。

本方法有一定的可取之处,在“算法后期,适应度趋于一致”的时候,该方法可以拉伸适应度,使遗传算法中的选择更有择优的效果。但该方法只是应用了模拟退火思想中“拉伸”的思想,无法解决早熟问题,并没有将模拟退火算法的爬山能力融入遗传算法中。

2.SAM(退火式变异)

遗传算法有三种明显劣势 3,一是编码所占用的储存空间可能很大(二进制码),二是可能出现早熟,陷入局部最优解,三是爬山能力差。Adler提出一种操作符——退火变异,伪代码如下:

SAM(s, T){
    s' = mutate(s);
    if (accept(s, s', T)) return s';
    else return s;
}

其中的aceept操作为模拟退火中的accept。计算变异后新的适应度与变异前适应度的差值,若变异后适应度更大,则接受变异;若变异后适应度变小,则以一定的退火概率 exp(δ/T) 来确定是否发生变异。这样的操作提高了遗传算法的效率,同时也可以一定程度上避免早熟的出现。

对于函数

y=x×sin(4πx)+2

在区间 [1,2] 上,使用自适应遗传算法AGA和引入SAM的模拟退火遗传算法SAGA对区间上最大值进行求解。记录所需遗传的代数,可以得到如下比较图。

这里写图片描述
使用AGA求解的遗传代数情况(两百次实验)

其中平均遗传代数为64.66次。

这里写图片描述
使用SAGA求解的遗传代数情况(两百次实验)

在退火初温度 T 取3时,平均遗传代数为28次,远远小于64.66次。
可以发现加入模拟退火变异操作后可以明显提高遗传算法的效率。

3. 另一种改进的遗传退火进化算法

操作流如下:

这里写图片描述

与上述仅仅将变异或交叉操作符中加入退火思想不同,本方法直接将一部分个体进行退火。


  1. 王小平. 遗传算法 : 理论、应用与软件实现[M]. 西安交通大学出版社, 2002.
  2. 王小平. 遗传算法 : 理论、应用与软件实现[M]. 西安交通大学出版社, 2002.
  3. Adler D. Genetic algorithms and simulated annealing: a marriage proposal[C]. international symposium on neural networks, 1993: 1104-1109.

猜你喜欢

转载自blog.csdn.net/qq_37043191/article/details/77572393