8

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

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

在此处输入图像描述

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

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

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

例如:

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

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

提前致谢。

4

3 回答 3

4

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

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

于 2018-05-30T23:50:15.527 回答
0

仅从“更合适的父母”那里获取不匹配的基因更有意义。由于交叉,这将产生强大的后代。对于匹配基因,应用通常的交叉算子。为了提高多样性,通过从两个父母中随机选择不匹配的基因来创建第二个后代。

这样,第一个后代将更适合,第二个后代将保持多样性。希望这可以帮助。

于 2018-10-04T10:14:54.107 回答
0

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

于 2021-04-21T09:59:14.267 回答