在DEAP中使用多重处理进行基因编程

时间:2019-11-30 13:16:24

标签: python multiprocessing genetic-programming deap

我正在使用DEAP库来实现基因编程,为此我使用了eaMuCommaLambda algorithm。为了并行运行程序,我遵循了DEAP document中的说明,并在if __name__ == "__main__"部分中添加了以下两行代码。

import multiprocessing

pool = multiprocessing.Pool()
toolbox.register("map", pool.map)

pop, log = algorithms.eaMuCommaLambda(pop, toolbox, MU, LAMBDA, cxpb, mutpb, gen, halloffame=hof, stats=mstats, verbose=True)

eaMuCommaLambda algorithm的源代码中,评估操作映射如下:

fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)

因此,通过将默认映射替换为pool.map,可以预期并行执行评估操作。该程序运行没有错误,但没有执行任何操作。最初,我可以看到几个进程在任务管理器中启动,但是很快它们的CPU使用率降为零,并且程序继续运行,而实际上似乎没有任何计算。根本不执行评估功能。该代码可以在没有多重处理的情况下正常工作,但是我不确定为什么多重处理无法正常工作。如果有人可以提出原因,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

在评估算法之后,请添加以下代码,然后尝试

pool.close()

这将确保关闭所有已启动的池。

希望这可以加快您的流程。

答案 1 :(得分:0)

我正在使用PyCharm在Windows中运行代码,并且似乎是多处理。池不能在交互式解释器中使用。可以在以下链接中找到更多信息:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000384464-Problem-using-multiprocess-with-IPython

通过在cmd中运行代码解决了问题。