我有一个遗传算法,我想加快。我认为实现这一目标的最简单方法是使用pythons多处理模块。在我的GA上运行cProfile后,我发现大部分计算时间都发生在评估函数中。
def evaluation():
scores = []
for chromosome in population:
scores.append(costly_function(chromosome))
我将如何并行化此方法?重要的是,所有分数的顺序与程序顺序运行时的顺序相同。
我正在使用python 2.7
答案 0 :(得分:2)
使用游泳池(我显示了imap和地图,因为谷歌上的一些结果说地图可能不适合订购,虽然我还没有看到证据):
from multiprocessing import Pool
def evaluation(population):
return list(Pool(processes=nprocs).imap(costly_function,population))
或(我使用的):
return Pool(processes=nprocs).map(costly_function,population)
将nprocs定义为您想要的并行进程数。
自: https://docs.python.org/dev/library/multiprocessing.html#multiprocessing.pool.Pool