我在关于进化计算的文章中读到,由于遗传漂变现象,算法通常会收敛到单一解。网上有很多相关内容,但我无法深入理解这个概念。我需要简单而精确地知道:
- 在进化计算的背景下,遗传漂变是什么?
- 它如何影响进化算法的收敛?
回答:
为了更好地理解遗传漂变的原始概念(生物学),我建议你阅读这篇 Khan Academy 的文章。简单来说,你可以将其视为一种进化现象,其中一个或多个等位基因(基因的版本)在种群中的频率由于随机因素(与每个个体的适应度无关)而发生变化。如果一个种群中最适应的个体不幸被雷击中并在繁殖前死亡,他将不会留下后代(尽管他拥有最高的适应度!)。这是一个(我知道有些荒谬的)遗传漂变的例子。
现在,在进化算法的特定背景下,这篇论文提供了关于该主题的良好总结:
进化算法中的遗传漂变可能是由多种因素共同作用的结果,主要与选择、适应度函数和表示有关。它通过无意中丢失基因型而发生。例如,一个好的基因型解可能永远不会被选中进行繁殖的随机机会。或者,如果一个解有“寿命”并且在繁殖前死亡。通常这种基因型只在种群中存在有限的几代。
(Sloss & Gustafson, 2019)
最后,我将给你一个遗传漂变在遗传算法中起作用的真实例子。最近,我使用了一个简单的neuroevolution算法来创建一个能够玩贪吃蛇游戏的代理(GitHub 仓库)。在我的游戏实现中,苹果出现在屏幕的随机位置。第一次执行进化过程时,我注意到种群最佳适应度在连续几代之间的波动很大——总体上没有太大改善。因此,我的算法无法收敛到一个好的解。
经过一些调试,我发现这是由遗传漂变引起的。因为苹果在随机位置生成,一些个体(不一定是最适应的)幸运地得到了“容易的苹果”,从而获得了高适应度并留下了更多后代。你明白这里的问题了吗?
假设蛇A比蛇B更擅长游戏,因为它能朝食物移动,而B只是随机移动。现在,假设蛇A出现的第一块食物在屏幕的角落(一个困难的位置),A在吃到苹果后不久就死了。现在,假设蛇B足够幸运,连续有3个苹果出现。虽然B比A“笨”,但它会留下更多后代,因为它获得了更高的适应度。B的后代会“污染”下一代,因为它们可能会像B一样“笨”。
我通过使用更好的苹果定位算法(我定义了两个连续苹果生成位置之间的最小距离)并通过计算每个个体在多个游戏会话中的平均适应度来解决这个问题。这大大减少了(虽然没有消除)遗传漂变对我算法的干扰。
希望这对你有帮助。你也可以查看这个视频(视频是葡萄牙语的,但有英文字幕),我在这解释了一些我用来制作贪吃蛇AI的策略。