整洁:规范

时间:2018-06-21 05:15:59

标签: genetic-algorithm neat genome

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

比方说,我在上一代中有以下物种:

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%,物种4可能会灭绝。

  

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

1 个答案:

答案 0 :(得分:1)

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

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

有很多NEAT口味。就您而言,您的疑虑似乎与精英主义的概念有关,是的,通常这是您需要设置的参数。通常,算法的工作原理如下:

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

请注意,物种形成是周期性地重新应用的(通常是每一代),因此物种并没有真正的明确定义(没有任何东西可以真正阻止将未改变地复制到下一代的优良基因组分配给新物种) )。

如果您使用固定的种群大小和k-均值物种,则无论什么情况,总会有k种。从某种意义上说,它们都是每次迭代的新物种。