NEAT算法:如何交叉不相交和多余的基因?

时间:2018-05-27 15:47:58

标签: neural-network genetic-algorithm evolutionary-algorithm crossover

我目前正在实施由Kenneth Stanley开发的NEAT算法,将原始paper作为参考。

在描述交叉方法的部分中,有一件事让我感到困惑。

enter image description here

因此,上图说明了NEAT的交叉方法。为了确定基因遗传的父母,该论文说明如下:

  

匹配基因是遗传的   随机的,而不相交的基因(那些在中间不匹配的基因)和过量   基因(那些最终不匹配的基因)是从更合适的父母遗传的。

对于匹配的基因(1-5),它很容易理解。您只需从Parent1或Parent2中随机继承(两者都有50%的可能性)。但是对于不相交(6-8)和过量(9-10)的基因,你不能从更合适的亲本继承,因为你只在Parent1或Parent2中有这些基因。

例如:

Parent1的健康状况高于Parent2的健康状况。不相交的基因6仅存在于Parent2中(当然,因为不相交和过量的基因仅存在于一个亲本中) 所以,你不能决定从更合适的父母继承这个基因。所有其他不相交和过量的基因也是如此。您只能从它们存在的父级继承那些。

所以我的问题是:你是否可以从更合适的父母那里继承所有匹配的基因,然后接管不相交和多余的基因?或者我在这里想念一些东西?

提前致谢。

3 个答案:

答案 0 :(得分:2)

查看实际实现并查看其处理方式可能会有所帮助。在最初的C ++代码here中(从第2085行开始),来自不合适父母的不相交和多余基因似乎只是被跳过了。

在您的实现中,您可以从不合适的父级继承不相交和过多的基因,但是以概率1禁用它们,以便稍后可以对它们进行逐点突变(切换禁用为启用)。然而,这可能导致显着的基因组膨胀,因此测试并看看哪些有效。

答案 1 :(得分:0)

仅从“更健康的父母”那里获得错配的基因更有意义。交叉将产生强大的后代。对于匹配的基因,应用常规的交叉算子。为了提高多样性,可以通过随机选择两个亲本的错配基因来创造第二个后代。

这样,第一代后代将更加健康,第二代后代将保持多样性。希望这会有所帮助。

答案 2 :(得分:0)

该图形描绘了具有相同适应度的两个父母的特殊情况,因此选择再次是随机的,因此可能导致所描绘的情况。我同意如果没有额外的信息,它会产生误导。