NEAT - 跨代管理物种

人工智能 遗传算法 整洁的
2021-10-25 01:55:43

我(误会?)理解 NEAT 算法有以下步骤:

  1. 创建一个包含 N 个随机基因组的基因组库
  2. 计算每个基因组适应度
  3. 将每个基因组分配给一个物种
  4. 计算调整后的适应度和每个物种的后代数量
  5. 通过来自更强基因组的突变/交叉培育每个物种
  6. 转到第 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 代中所代表的东西。

2个回答

在一些实施方式中,物种代表每代都改变。这允许动态定义物种是什么。如果您每一代都从头开始(意味着每个物种都被分配了一个新的代表),那么您就不会有代表离开其物种的问题。

我认为在您描述的特定情况下,如果代表现在兼容,您会将较低适应度代表移动到较高适应度代表物种中,然后将其余较低代表物种(所有其他基因组没有足够接近的相容距离移动进入其他物种)你会随机选择一个新的代表并继续这个过程。