我一直在寻找可以为我正在研究的遗传算法实现自适应突变率的方法。我见过一种算法,它使用当前个体适应度和平均群体适应度来计算突变率,但我不确定它是否非常有效。
在算法中,我看到您执行以下操作:
mutationRate = (bestFitness - individualFitness) / (bestFitness - averageFitness) * 0.5
这是一个好方法还是有更好的方法?
我一直在寻找可以为我正在研究的遗传算法实现自适应突变率的方法。我见过一种算法,它使用当前个体适应度和平均群体适应度来计算突变率,但我不确定它是否非常有效。
在算法中,我看到您执行以下操作:
mutationRate = (bestFitness - individualFitness) / (bestFitness - averageFitness) * 0.5
这是一个好方法还是有更好的方法?
我认为没有“最佳方法”:突变算法和突变率是特定于问题/算法的。
不幸的是,根据许多实际实验,即使是自适应突变也很容易陷入局部最优。
使用您正在使用的自适应突变方法,具有高适应度的个体对应于较小的突变概率,而具有低适应度的个体对应于高突变概率。
这种方法可以有效保护优秀个体,但容易陷入局部收敛。
如果遗传多样性逐渐丧失(为了维持分布在搜索空间中的种群),另一种(不一定更好)的方法是增加突变率。
否则,当观察到种群多样性增加时,该值会降低。
突变率值的这些变化也是探索和利用之间良好平衡的额外来源(见1)。
参考
GA 中没有灵丹妙药。有多种方法可以实现突变和其他因素,但都取决于您使用的领域、约束数量、适应度函数以及所有其他因素。
你能做的最好的就是找出自己——尝试不同的方法,看看你是否能得到更好的结果。此外,也许https://cstheory.stackexchange.com/会是提出此类问题的更好地方。