【发布时间】:2021-04-29 21:19:22
【问题描述】:
我正在从头开始实施 NEAT,但偶然发现了一个我无法找到具体答案的问题。在每个其他网络都被物种化之后,NEAT 算法如何响应其中只有一个成员的物种?
我已经想到了一些可能的答案,如果有任何额外的见解,我将不胜感激。
-
保持单一成员物种不变,将其唯一幸存的成员传给下一代,希望将来某个时候能找到该物种的更多成员并且该物种能够生长。这样做的主要问题是 NEAT 根据调整后的适应度分配新的物种大小;这意味着如果它的适应度优于种群平均值,它可能会指示(并期望)1 成员物种生长。假设我们有两个物种:大小为 99 和 1 个成员 - NEAT 会(假设较小的物种具有更高的适应度)然后使 99 个物种缩小并且 1 个成员物种生长 - 但小物种由于只有一个而无法繁殖会员。
-
将该物种的唯一成员克隆给定次数,以匹配 NEAT 计算的该物种的新物种大小。这似乎不是最好的解决方案,因为它大大减少了人口的多样性,并且似乎会很快导致停滞。
-
通过单个突变繁殖一个成员,然后交叉这个物种的现在两个成员,直到满足新的大小要求。遇到与 (2) 类似的问题。
-
通过 N 个突变复制一个成员,其中 N 是 NEAT 计算的新物种大小。这似乎涉及大量的随机性,并可能导致新物种在该物种内进化,使问题进一步失控。
-
在物种形成阶段结束时将唯一的物种成员与一些较大的物种混在一起,并导致其当前物种灭绝。这样做的问题是丢失了新网络尚未有时间优化的潜在有用突变/网络拓扑。
提前致谢!
【问题讨论】:
-
为什么要从头开始编写 NEAT?我不认为这是最好的练习,结果肯定会更糟!也就是说,我熟悉的 NEAT 实现使用 k-means 进行物种形成,因此通常不可能有 1 个物种。此外,我们没有对每个物种施加固定数量的突变,而是作为一个分数或概率。最后,我们使用了精英(意味着每个物种中 x% 最好的通过不变),所以在你的情况下,个人在这一步不会真正改变。
标签: neat