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

Tom*_* B. 5 neural-network genetic-algorithm evolutionary-algorithm crossover

我目前正在实施Kenneth Stanley开发的NEAT算法,并以原始论文为参考。

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

在此处输入图片说明

因此,上图说明了NEAT的交叉方法。为了确定一个基因是从哪个父母那里继承的,论文说:

匹配的基因是随机继承的,而不相交的基因(中间不匹配的基因)和多余的基因(最后不匹配的基因)则是从更合适的父母那里继承的。

对于匹配的基因(1-5),很容易理解。您只是从Parent1或Parent2中随机继承(两者都有50%的机会)。但是,对于不相交的(6-8)和多余的(9-10)基因,您不能从更适合的父母那里继承,因为您只能在Parent1或Parent2中拥有那些基因。

例如:

Parent1的适应度高于Parent2的适应度。不相交的基因6仅存在于Parent2中(当然,因为不相交和多余的基因仅在一个亲代中发生),因此,您不能决定从更适合的亲本继承该基因。所有其他不相交和多余的基因也是如此。您只能从它们所在的父级继承它们。

所以我的问题是:您是否可能从更合适的父母那里继承所有匹配的基因,然后接管不相交和多余的基因?还是我在这里误会了什么?

提前致谢。

can*_*ust 6

查看实际的实现并了解它是如何处理的可能会有所帮助。在原始的 C++ 代码中查看第 2085 行开始),来自不合适父代的不相交和多余基因似乎被跳过了。

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

  • “来自不健康父母的不相交和多余的基因似乎被跳过”对我有用。我很惊讶这个问题不再受欢迎。关于 NEAT 的原始论文对于交叉的语义绝对不清楚。 (3认同)