遗传算法中的按需变异

数据挖掘 数据挖掘 遗传算法 进化算法
2021-09-15 18:39:26

遗传算法通常使用“突变率”来控制染色体突变率。researchgate 的大多数研究人员建议保持此速率较低,以便快速收敛,以便能够找到局部最优值,而不是使优化成为随机游走。但是,我发现保持低突变率存在一个主要问题。如果某一点的育种没有产生“新的”子代/染色体,那么算法将非常低​​效地运行。假设种群中的所有个体都具有相同的染色体,那么交叉将导致相同的个体,直到其中一个染色体发生突变。使用低速率,这可能需要很长时间(直到那时具有相同染色体的适应度函数被一次又一次地重复)。

一旦儿童/染色体在下一代中重复以确保我们探索新的解决方案空间,故意突变不是更有效吗?这不会使“突变率”过时并且整个算法更有效还是我在这里错过了一个要点?

1个回答

如果某一点的育种没有产生“新的”子代/染色体,那么算法将非常低​​效地运行。假设种群中的所有个体都有相同的染色体,那么交叉将导致相同的个体,直到其中一个染色体发生突变

这是正确的,但理论上这种情况应该只在算法已经收敛时才会发生,这意味着染色体实际上是最优的。如果这在达到最佳解决方案之前偶然发生,那么可能是因为种群规模太小,应该更高,以保持多样性并允许不时发生突变。

例如,如果种群规模为 100,突变率为 0.02,那么在每一代特定基因平均有两个突变。这保持了一点多样性,因为如果结果证明是有益的,突变基因很可能会在下一代复制。

我对遗传算法的经验是,许多变体都是可能的,恕我直言,用数据集探​​索各种变体是个好主意,包括非标准参数,例如“自动变异”的想法,因为为什么不呢?我可以想象的危险是,这可能会导致过多的变化并阻止或减慢收敛速度,但测试是了解会发生什么的最佳方法。