【问题标题】:NEAT - What to do with single member species?NEAT - 如何处理单个成员物种?
【发布时间】:2021-04-29 21:19:22
【问题描述】:

我正在从头开始实施 NEAT,但偶然发现了一个我无法找到具体答案的问题。在每个其他网络都被物种化之后,NEAT 算法如何响应其中只有一个成员的物种?

我已经想到了一些可能的答案,如果有任何额外的见解,我将不胜感激。

  1. 保持单一成员物种不变,将其唯一幸存的成员传给下一代,希望将来某个时候能找到该物种的更多成员并且该物种能够生长。这样做的主要问题是 NEAT 根据调整后的适应度分配新的物种大小;这意味着如果它的适应度优于种群平均值,它可能会指示(并期望)1 成员物种生长。假设我们有两个物种:大小为 99 和 1 个成员 - NEAT 会(假设较小的物种具有更高的适应度)然后使 99 个物种缩小并且 1 个成员物种生长 - 但小物种由于只有一个而无法繁殖会员。

  2. 将该物种的唯一成员克隆给定次数,以匹配 NEAT 计算的该物种的新物种大小。这似乎不是最好的解决方案,因为它大大减少了人口的多样性,并且似乎会很快导致停滞。

  3. 通过单个突变繁殖一个成员,然后交叉这个物种的现在两个成员,直到满足新的大小要求。遇到与 (2) 类似的问题。

  4. 通过 N 个突变复制一个成员,其中 N 是 NEAT 计算的新物种大小。这似乎涉及大量的随机性,并可能导致新物种在该物种内进化,使问题进一步失控。

  5. 在物种形成阶段结束时将唯一的物种成员与一些较大的物种混在一起,并导致其当前物种灭绝。这样做的问题是丢失了新网络尚未有时间优化的潜在有用突变/网络拓扑。

提前致谢!

【问题讨论】:

  • 为什么要从头开始编写 NEAT?我不认为这是最好的练习,结果肯定会更糟!也就是说,我熟悉的 NEAT 实现使用 k-means 进行物种形成,因此通常不可能有 1 个物种。此外,我们没有对每个物种施加固定数量的突变,而是作为一个分数或概率。最后,我们使用了精英(意味着每个物种中 x% 最好的通过不变),所以在你的情况下,个人在这一步不会真正改变。

标签: neat


【解决方案1】:

我只是想添加一个评论,但我没有足够的声誉,所以我会写一个答案并让它更长,我会评论一些我不太同意的部分,基于我对整洁的了解。

首先,我认为您应该看看 youtube 上的 Finn Eggers 频道​​(或其他实现,我之所以说这个是因为我看过视频),他实现了整洁,并且在视频 8 中(我认为)他处理了这个问题。他所做的是将所有具有 1 个成员的物种标记为“灭绝”并将其删除。实际上,如果该物种只有 1 个成员,则意味着所有成员都已被杀死,并且当他们得分低时会发生这种情况,因此保留该物种毫无意义。

假设我们有两个物种:99 个成员和 1 个成员 - NEAT 会(假设较小的物种具有更高的适应度)然后使 99 个物种缩小而 1 个成员物种增长

我不明白这一点:假设您从 2 个物种开始,每个物种 50 个成员,杀死 80% 的种群(基于适应度得分),繁殖幸存者并以 99-1 结束。 这是什么意思?

首先,这意味着你杀死的 80 个个体中 49 个来自物种 2,31 个来自物种 1,这意味着物种 2 中的个体比物种 1 中的个体更差。

此外,您没有物种 2 的新生儿:当父母不属于该物种时会发生这种情况,也许有一个,但孩子仍然不能归类为该物种的成员。由于父母选择也是基于适应度得分,这意味着物种 1 的元素比物种 2 的唯一一个幸存者得分更高,并且被选择的频率更高,所以我们仍然认为物种 1 优于 2。 总之,如果一个物种最终只有一个成员并且不会生长,这意味着它很烂。

但由于只有一个成员,小物种无法繁殖。

1 个成员物种可以变得更大:你可以从两个不同物种中获取两个父母,创建一个孩子,如果距离函数告诉孩子属于那个物种,你把它放在那里。您不需要拥有来自同一物种的所有父母来为该物种创建一个孩子。

5.在物种形成阶段结束时将物种中唯一的成员与一些较大的物种混在一起,并导致其当前物种灭绝。

你不能只把一个成员放在另一个物种中:如果与其他物种的距离太远,你必须有一个特定的物种,即使它只是一个成员

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多