在DEAP中使用多处理方法进行遗传编程

问题描述 投票:0回答:1

我正在使用DEAP库来实现遗传编程,我已经使用了 eaMuCommaLambda algorithm 来实现这一目的。为了并行运行程序,我按照在 DEAP文件 中添加了以下两行代码。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替换默认的map,预计会有并行的评估操作。程序运行时没有错误,但它没有做任何事情。起初,我可以在任务管理器中看到几个进程启动,但很快它们的CPU使用率就降为零,程序一直在运行,而实际上似乎什么也没有计算。评估功能根本没有执行。在没有多进程的情况下,代码可以正常运行,但我不知道为什么多进程不能正常运行。如果有谁能给我建议,我将感激不尽。

python multiprocessing genetic-programming deap
1个回答
0
投票

后到您的评估算法,请添加下面的代码和尝试。

pool.close()

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

希望这能加快你的进程。


0
投票

我使用PyCharm在Windows中运行代码,似乎multiprocessing.Pool不能在交互式解释器内使用。更多信息可以在下面的链接中找到。https:/intellij-support.jetbrains.comhcen-uscommunityposts115000384464-Problem-using-multiprocess-with-IPython。

在cmd中运行代码,问题就解决了。

© www.soinside.com 2019 - 2024. All rights reserved.