神经网络 – NEAT算法:如何交叉不相交和多余的基因?

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

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

《神经网络 – NEAT算法:如何交叉不相交和多余的基因?》

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

Matching genes are inherited
randomly, whereas disjoint genes (those that do not match in the middle) and excess
genes (those that do not match in the end) are inherited from the more fit parent.

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

例如:

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

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

提前致谢.

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

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

点赞