在 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 中输入代码解决。
我正在使用 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 中输入代码解决。