【问题标题】:NEAT: Speciating整洁:物种形成
【发布时间】:2018-11-30 07:57:41
【问题描述】:

我试图自己实现整洁,使用原始论文但卡住了。

假设在上一代我有以下物种:

Specie 1:     members: 100    avg_score: 100
Specie 2:     members: 150    avg_score: 120
Specie 3:     members: 300    avg_score: 50
Specie 4:     members: 10     avg_score: 110

我现在对下一代的尝试。如下:

  1. 从每个物种中移除每个基因组,但一个随机基因组除外。
  2. 将每个基因组放入物种中/也许创造一个新的
  3. 将该物种的得分设置为该物种中每个基因组得分的平均值。

    4.1 通过杀死每个物种中最差的 90% 进行繁殖。

    4.2 根据他们的分数选择一个物种。

    4.3 从那个物种中,选择 2 个基因组并繁殖一个新的基因组。

我不确定这是否是正确的尝试,尤其是当我“杀死” 90% 的基因组时。 这个百分比值是我现在随机选择的(这只是概念)。

如果一个物种,在杀死之后,有 0 个成员。然后它就灭绝了吗?

在我给出的例子中,如果我杀死 90%,Specie 4 很可能会灭绝。

我的尝试是否正确,或者一个物种通常是如何灭绝的?

【问题讨论】:

    标签: genetic-algorithm neat genome


    【解决方案1】:

    首先,我强烈建议不要尝试从头开始实施 NEAT。这是一件比最初看起来要复杂得多的事情(请随意查看许多可用实现的公共存储库)。

    现在,更具体地回答您的问题:

    NEAT 有多种口味。就您而言,您的疑虑似乎与精英主义的概念有关,是的,这通常是您需要自己设置的参数。通常该算法是这样工作的:

    1. 物种基因组。也就是说,将它们排列成给定数量的物种,使它们彼此更接近(例如,k-means 物种形成)。
    2. 选择精英。您从每个物种中保留给定数量或百分比的个体,并将它们传递给新一代。根据您如何应用这一点,每个物种中总会有至少一名成员存活下来!
    3. 根据适应度(也许还根据物种的适应度)选择用于繁殖的基因组。这也允许不同的特定实施风格。
    4. 复制。有无性繁殖(所选基因组的变异)和有性繁殖。有性生殖的工作原理是从两个父母那里获取基因(同样,不同的实现方式),然后突变一些。有种间和种内的有性生殖(是来自同一物种或来自不同物种的另一亲本),但您可以随意禁用任何一种。
    5. 重新评估后代(设置新的适应度值)。
    6. 物种形成。

    请注意,物种形成会定期重新应用(通常是每一代),因此物种并没有真正的明确定义(没有什么能真正阻止精英基因组,原封不动地复制到下一代,分配给新物种)。

    如果您使用固定的种群规模和 k 均值物种形成,那么无论如何都会有 k 个物种。从某种意义上说,它们每一次迭代都是新物种。

    【讨论】:

    • 感谢您的解释!有没有办法调整无性、间性和内性繁殖的行为?
    • 当然有!首先,您可以调整每个事件的可能性,或事件“关闭”其中任何一个。您还可以更改物种形成的参数(您形成新群体的可能性,您是否拥有固定数量的物种等)。您可以更改精英的数量。您可以决定如何处理有性生殖中不相容的“基因”:不要混合这些个体?只混合常见的东西,然后随机从一位父母那里拿走其余的东西? (如果是这样,来自最合适的父母?随机一个?)。您还需要调整一些突变率(新连接、删除节点等)。
    • 不错!谢谢,我想我已经看到了配置文件中的大部分选项。
    • 我确实想知道如何添加更多的性内行为..
    • 在我使用的 NEAT 的 C# 版本中,有一个用于此的参数,但要记住确切的细节已经很久了。
    猜你喜欢
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2021-06-18
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多