我一直在阅读这篇关于 NEAT 的论文并尝试在 C# 中实现该算法。在大多数情况下,我了解论文中的所有内容,但是有两件事我不明白,这让我感到困惑。
- 在论文中它指出:
一个可能的问题是,相同的结构性创新如果偶然发生不止一次,在同一代人中会获得不同的创新数量。但是,通过保留当前一代发生的创新列表,可以确保当同一结构通过同一代的独立突变多次出现时,每个相同的突变都被分配相同的创新编号。广泛的实验表明,每一代都重置列表,而不是在整个进化过程中保持不断增长的突变列表,足以防止创新数量爆炸式增长。
这意味着没有使用全局列表/集来跟踪创新。如果您有一个全局集来跟踪它们,那么您不需要在当前一代的演变过程中使用列表,因为一旦创建了创新,它就会被添加到集合中。这将被下一个评估的网络/基因组看到。
根据我的阅读,每个人都使用全球列表来跟踪创新。这对我来说很有意义。考虑到他们进行了广泛的测试以确定他们只需要一个列表来评估当前一代,我对他们在论文中是如何做到的感到非常困惑。