我(误会?)理解 NEAT 算法有以下步骤:
- 创建一个包含 N 个随机基因组的基因组库
- 计算每个基因组适应度
- 将每个基因组分配给一个物种
- 计算调整后的适应度和每个物种的后代数量
- 通过来自更强基因组的突变/交叉培育每个物种
- 转到第 2 步。
第 3 步是棘手的:进行物种形成,将每个基因组 G 置于与该物种的代表性基因组相容的第一个物种中,如果 G 与任何现有物种不相容,则置于新物种中。兼容意味着具有低于某个阈值的兼容距离。关于代表性基因组NEAT 论文说:
每个现有物种都由上一代物种内部的随机基因组表示
在某处我发现保持物种数量稳定是好的,这是通过动态阈值自动实现的。然而,动态阈值使得难以评估跨代的物种行为。
举个例子:假设在第 20 代,物种 1 以基因组 A 为代表,物种 2 以基因组 B 为代表。假设实行精英主义。
由于代表性基因组取自上一代,假设在第 21 代,基因组 A 和 B 仍然是物种 1 和 2 的代表,但是假设相容阈值已经改变(即更大)以达到目标物种数量。有了这个变化,A和B现在的相容距离低于阈值,应该放在同一个物种中,但是它们是不同物种的代表。
如何解决这个问题?
更一般地说,通过动态阈值,如何确保跨代物种管理是一致的?例如 NEAT 论文还说:
如果一个物种的最大适应度在 15 代中没有提高,则停滞物种中的网络不允许繁殖。
如何确保在所有 15 代人中,我们仍在考虑相同的单一物种并且这没有发生巨大变化(因此它们实际上是不同的“对象”?)。例如,在上面的例子中,如果 A 和 B 在第 21 代中都被放在物种 1 中,那么物种 2 不再代表它在第 20 代中所代表的东西。