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



我正在使用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,预期将并行执行评估操作。程序运行没有错误,但它没有执行任何操作。起初,我可以看到几个进程在任务管理器中启动,但很快它们的 CPU 使用率下降到零,程序继续运行,而实际上似乎什么都没有计算。根本不执行评估功能。代码在没有多处理的情况下工作正常,但我不确定为什么多处理不能正常工作。如果有人能提出可能的原因,我将不胜感激。

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

pool.close((

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

希望这能加快您的流程。

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

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

相关内容

  • 没有找到相关文章

最新更新