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

Using multiprocessing in DEAP for genetic programming

我正在使用 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 使用率下降到零并且程序保持 运行ning 而似乎没有实际计算。根本不执行评估功能。代码在没有多处理的情况下工作正常,但我不确定为什么多处理不能正常工作。如果有人能提出可能是什么原因,我将不胜感激。

你的评估算法完成后,请添加下面的代码试试,

pool.close()

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

希望这能加快您的进程。

我使用 PyCharm 到 运行 Windows 中的代码,看来 multiprocessing.Pool 不能在交互式解释器中使用。可以在以下 link 中找到更多信息:https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000384464-Problem-using-multiprocess-with-IPython

问题已通过 运行在 cmd 中输入代码解决。