我编写了一个遗传算法,为了优化它的性能,我决定对个体的适应度测试进行并行化。为了了解这对我的算法产生了什么样的变化,我重新进行了我在并行化之前所做的测试运行,在该运行中我测试了 GA 针对不断增长的人口规模的性能。
GA 的并行版本实际上比原始版本花费了大约 50% 的时间。我意识到有时并行化的开销实际上可能比它节省的时间更多,但我怀疑这是否应该适用于这种情况——我的适应性测试正在寻找 Sheckel 的 Foxholes 函数的全局最小值(http://extreme.adorio -research.org/download/mvf/html/node51.html),我的人口规模从 10 到 1000 不等。我希望在并行执行 1000 次 sheckel 散兵坑时,节省的时间将大大超过并行化的开销。
所以我的问题是:为什么并行化会减慢算法的速度(并且如此显着)?
作为记录,我正在使用 Java 进行编码,并且正在使用 CountDownLatch 进行并行化,该 CountDownLatch 在继续之前等待所有线程(适应性测试)执行。