【发布时间】:2015-02-18 14:24:30
【问题描述】:
我一直在使用遗传算法的并行处理来提高性能,但我想知道还有哪些其他常用技术可以优化遗传算法?
【问题讨论】:
-
我将 GA 的变异和交叉部分移到了 CUDA 中,结果有所不同。它只用一些透明的圆圈在几分钟内就画出了蒙娜丽莎。
标签: optimization artificial-intelligence genetic-algorithm
我一直在使用遗传算法的并行处理来提高性能,但我想知道还有哪些其他常用技术可以优化遗传算法?
【问题讨论】:
标签: optimization artificial-intelligence genetic-algorithm
由于适应度值经常被重新计算(种群的多样性随着算法的运行而减少),提高 GA 性能的一个好策略是减少计算适应度所需的时间。
细节取决于实现,但之前计算的适应度值通常可以 使用哈希表有效保存。这种优化可以显着减少计算时间(例如,"IMPROVING GENETIC ALGORITHMS PERFORMANCE BY HASHING FITNESS VALUES" - RICHARD J. POVINELLI, XIN FENG 报告称,将散列应用于 GA 可以将复杂的实际问题的性能提高 50% 以上)。
一个关键点是冲突管理:您可以简单地覆盖哈希表的现有元素或采用某种方案(例如线性探测)。
在后一种情况下,随着冲突的增加,哈希表的效率会降低到线性搜索的效率。当累积的冲突次数超过哈希表的大小时,应该执行重新哈希:您必须创建一个更大的哈希表并将元素从较小的哈希表复制到较大的哈希表中。
复制步骤可以省略:随着遗传算法的运行,多样性降低,因此许多被淘汰的元素将不会被使用,最常用的染色体值将被快速重新计算(哈希表将再次填充最常用的关键元素值)。
【讨论】:
我做过的一件事是限制适应度计算的次数。例如,在景观不嘈杂的情况下,即重新计算适应度每次都会产生相同的答案,不要重新计算只是缓存答案。
另一种方法是使用内存运算符。操作员维护解决方案的“记忆”,并确保该记忆中的最佳解决方案比总体中的最佳解决方案更好。在 GA 运行期间,内存会通过良好的解决方案保持最新。这种方法可以减少所需的适应度计算次数并提高性能。
我在这里有一些这样的例子:
http://johnnewcombe.net/blog/gaf-part-8/ http://johnnewcombe.net/blog/gaf-part-3/
【讨论】:
这是一个非常广泛的问题;我建议为此目的使用 R galgo 包。
【讨论】: