我试图自己使用原始论文来实现整洁,但被卡住了。
假设在上一代我有以下物种:
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
我现在对下一代的尝试。如下:
- 从每个物种中,删除除一个随机基因组之外的每个基因组。
- 将每个基因组放入物种中/也许创建一个新基因组
-
将物种的得分设置为该物种中每个基因组得分的平均值。
4.1 通过杀死每个物种中最差的 90% 来繁殖。
4.2 根据分数选择一个物种。
4.3 从该物种中选择2个基因组并培育出新的基因组。
我不确定这是否是正确的尝试,尤其是当我“杀死”了 90% 的基因组时。
这个百分比值是我现在随机选择的(这只是一个概念)。
如果一个物种在被杀死后有 0 个成员。那么它就灭绝了吗?
在我给出的例子中,如果我杀死 90%,Specie 4 很可能会灭绝。
我的尝试是否正确,或者一个物种通常是如何灭绝的?
首先,我强烈建议不要尝试从头开始实施 NEAT。这是一件比乍看起来要复杂得多的事情(请随意查看许多可用实现的公共存储库)。
现在,更具体地回答您的问题:
NEAT有很多种口味。就您而言,您的疑虑似乎涉及精英主义的概念,是的,这通常是您需要自己设定的参数。通常该算法的工作原理如下:
- 物种基因组。也就是说,将它们排列成给定数量的物种,使彼此更接近的物种放在一起(例如,k 均值物种形成)。
- 选拔精英。您从每个物种中保留给定数量或百分比的个体,并将它们传递给新一代。根据您如何应用这一点,每个物种中总会至少有一名成员存活下来!
- 根据适应性(或许也根据物种的适应性)选择用于繁殖的基因组。这也允许不同的特定实现风格。
- 再生产。有无性繁殖(所选基因组的变异)和有性繁殖。有性生殖的原理是从两个父母那里获取基因(同样是不同的实现方式),然后对一些基因进行突变。存在物种间和物种内的有性繁殖(来自同一物种或不同物种的另一亲本),但您可以随意禁用其中任何一个。
- 重新评估后代(设置新的适应度值)。
- 物种形成。
请注意,物种形成会定期重新应用(通常是每一代),因此物种实际上并没有一个强有力的定义(没有什么能真正阻止精英基因组,不加改变地复制到下一代,分配给新物种)。
如果您使用固定的种群规模和 k 均值物种形成,则无论如何都会有 k 个物种。从某种意义上说,它们每次迭代都是新物种。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)