什么是计算效率最高的遗传算法?

人工智能 遗传算法 进化算法 时间复杂度 交叉运营商 选择运算符
2021-10-20 09:46:11

在研究遗传算法时,似乎有各种选择方法和其他算子方法可以显着改变性能。例如,这张图片包含一些可以使用的方法:

通用算法运算符

据推测,您可以混合和匹配这些运算符来优化您要解决的任何问题。

大多数人关心的是达到目标需要多少次迭代。这是可以理解的,但我见过在实际系统中效率低下的事情,例如:

  • 对当前人口使用排序O(nlogn)并为交配池挑选前 n 个成员

  • 附加到不断调整大小的切片以创建匹配池,而不是在当前数组上重写

我正在寻找的是,如何使用尽可能少的计算和内存达到目标。迭代次数和到达那里所需的时间仍然是次要的。

这可能是选择正确运算符的过程,但我也在考虑的是实现的并行化程度。

1个回答

首先,对于很多现实问题,适应度函数评估的复杂度通常比遗传算法的其余部分大几个数量级。这并不总是正确的,但通常是正确的(例如,想象一下尝试优化模拟,您需要完全执行模拟以获得适应度)。因此,优化 GA 本身可能仅在适应度函数很轻的时候才有用(例如,它是在某些比赛中使用的数学函数)。

虽然您的图表显示了许多运算符,但它并没有显示 GA 本身的变体。这里有两个:

  • 分代:在对现有种群进行变异和交叉后,在每次迭代中选择一个新种群产生后代(通常数量大于种群规模)
  • 稳定状态:维护单个种群,并且在每次迭代期间仅根据选择/替换规则用他们的后代替换个体,因此比传统 GA 使用更少的内存

如果您真的想在 GA 中最大限度地提高效率,稳态方法可能与锦标赛选择结合使用效果最好,因为锦标赛选择不需要任何排序。您列出的突变/交叉运算符可能都非常有效,但更简单的方法可能是最有效的(例如位翻转突变+1 点交叉)。然而,对于现实问题,特定于问题的运算符通常效果最好。