什么是遗传漂变以及它如何影响 EA?

问题描述

我在一些关于进化计算的文章中读到,由于遗传漂移现象,算法通常会收敛到一个单一的解决方案。网上有很多内容,但是我无法深入理解这个概念。我需要简单而准确地知道:

  • 进化计算背景下的遗传漂变是什么?
  • 它如何影响进化算法的收敛?

解决方法

为了更好地理解遗传漂变(生物学)的原始概念,我建议您阅读 this 可汗学院的文章。简单地说,您可以将其视为一种进化现象,其中种群中一个或多个等位基因(基因的版本)的频率因随机因素(与每个个体的适应度无关)而发生变化。如果一个种群中最健康的个体由于运气不好被闪电击中并在繁殖前死亡,他不会留下后代(尽管他的健康度最高!)。这是遗传漂变的一个例子(有点荒谬,我知道)。

现在,在进化算法的特定背景下,this 论文提供了关于该主题的很好的总结:

EA 的遗传漂变可能是多种因素共同作用的结果, 主要与选择、适应度函数和表示有关。 它是由于基因型的无意丢失而发生的。例如,随机 一个好的基因型解决方案永远不会被选中的机会 再生产。或者,如果一个解决方案有一个“生命周期”并且它死了 在它可以繁殖之前。通常这种基因型只存在于 种群数量有限。

(斯洛斯和古斯塔夫森,2019 年)

最后,我会给你一个真实的例子,说明遗传漂变作用于遗传算法。最近,我使用了一个简单的神经进化算法来创建一个能够玩贪吃蛇游戏 (GitHub repo) 的代理。在我的游戏实现中,苹果出现在屏幕的随机位置。当第一次执行进化过程时,我注意到连续几代之间种群的最佳适应度有很大的波动——总的来说,它并没有太大的改善。因此,我的算法无法收敛到一个好的解决方案。

经过一些调试,我发现这是由基因漂移引起的。由于苹果产卵位置随机,有些个体,不一定是最适者,幸运地得到了“容易苹果”,从而达到了较高的适应度,留下了更多的后代。你看到这里的问题了吗?

假设蛇 A 比蛇 B 更擅长游戏,因为它可以向食物移动,而 B 只能随机移动。现在,假设为蛇 A 出现的第一个食物在屏幕的一角(一个困难的位置),并且 A 在吃完苹果后不久就死了。现在,假设蛇 B 有幸连续产卵 3 个苹果,一个接一个。虽然B比A“笨”,但它会留下更多的后代,因为它实现了更大的适应度。 B的后代会“污染”下一代,因为他们很可能会像B一样“笨”。

我使用更好的苹果定位算法(我定义了两个连续苹果的产卵位置之间的最小距离)并通过计算每个人的最终适应度作为其在几次游戏中的适应度平均值来解决该问题。这大大减少了(虽然并没有消除)遗传漂变对我的算法的干扰。

我希望这会有所帮助。您还可以观看 this 视频(它是葡萄牙语,但有英文字幕),我在其中解释了我用来制作 Snake AI 的一些策略。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...