我一直在研究如何为我正在研究的遗传算法实现自适应突变率。我见过一种算法,它使用当前个体适应度和平均群体适应度来计算突变率,但我不确定它是否非常有效。
在我看到的算法中,您执行了以下操作:
mutationRate = (bestFitness - individualFitness) / (bestFitness - averageFitness) * 0.5
这是一个好方法还是有更好的方法?
最佳答案
我认为没有“最佳方法”:变异算法和变异率是特定于问题/算法的。
不幸的是,根据许多实际实验,即使是自适应突变也很容易陷入局部最优。
通过您使用的自适应突变方法,一个具有高适应性的个体 对应较小的变异概率,适应度低的个体对应较高的变异概率。
该方法可以有效保护优秀个体,但容易陷入局部收敛。
另一种(不一定更好)方法是在遗传多样性逐渐丧失的情况下增加突变率(以维持分布在 搜索空间)。
否则,当观察到种群多样性增加时,该值会降低。
突变率值的这些变化也是探索和利用之间良好平衡的额外来源(参见 1)。
引用资料
- A New Strategy for Adapting the Mutation Probability in Genetic Algorithms - Natalia Stark、Gabriela Minetti、Carolina Salto
- Adaptive mutation rate control schemes in genetic algorithms -德克·蒂伦斯
关于algorithm - 遗传算法的自适应突变/交叉率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26575447/