0. 写在前面
参考博文:遗传算法的几种改进 - GXTon - 博客园 (cnblogs.com)
参考文献:新型灾变自适应遗传算法及其应用 (c-s-a.org.cn)
没想到被最基础的遗传算法打败了??o·(? ??????????? )?o·?
在编写遗传算法时我发现了一些问题:
遗传算法经常被应用于工业生产中的最优化问题当中, 但是在面对非线性、多极值、多变量的问题时容易在早期寻优过程中陷入局部最优解范围,通过大量的实验分析可得, 在解决具有多变量的最优化问题时, 遗传算法很容易因为遗传算法的特性造成“早熟”现象。(ps. 这次我研究的就是非线性且超多变量的问题,感觉被说中了T_T
1. 灾变操作
假设迭代次数为M,在第\(m(m<M)\)代之后,多数个体与最优个体相似度高(只有最优个体及最差个体相似度低),此时进行如下操作,以产生新种群:
-
将当前种群状态、最优个体及其适应度值进行保存
-
保留数量较少的适应度值较差的个体
-
将种群中大多数适应度优秀的个体进行删除
-
随机产生新个体进行补充
优点:
2. 避免近亲繁殖的交叉算子
遗传算法中,在交叉之前需要进行配对。常用的方法是随机配对,但存在一个问题,当遗传过程进入局部最优时,群体中有很多几乎完全相同的串,我们称之为 “近亲”。当这些串进行交叉时,由很低的概率产生新的模式,类似于近亲繁殖,这样就无法跳出局部最优。
有学者提出了近亲交叉回避的思想,利用海明距离来判别亲缘关系的远近,参与交叉的两个串的海明距离过近,交换产生的新模式可能就会很少,容易陷入局部最优。
3. 避免局部收敛的动态变异率
基本思路为:当判断出种群出现“早熟”趋势时,以一个远大于通常变异概率的概率对所有个体执行一次变异操作,独立随机的产生许多新的个体,从而使整个群体脱离“早熟”。
4. 返回机制
为了提高算法的全局搜索性能,提高搜索的遍历性,可加入了返回操作。返回操作的概念是当交叉、变异操作失利时,即新生成的群体的平均(最优)适应度水平低于原先群体的平均(最优)适应度水平时,则否定此次操作,恢复到之前的种群状态。