【问题标题】:NEAT algorithm: How to crossover disjoint and excess genes?NEAT 算法:如何交叉不相交和多余的基因?
【发布时间】:2018-11-06 07:25:30
【问题描述】:

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

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

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

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

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

例如:

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,实现解决了问题。我想我会试试你的建议,看看效果如何。
    • “来自不合适的父母的不相交和多余的基因似乎只是被跳过了”对我有用。我很惊讶这个问题不再受欢迎。关于 NEAT 的原始论文绝对不清楚交叉的语义。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-01
        • 2017-08-19
        • 2016-09-16
        • 1970-01-01
        • 2011-04-20
        • 2014-08-12
        • 1970-01-01
        相关资源
        最近更新 更多