python中的并行/多线程差分进化

2024-05-29 02:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图建立一个生化过程的模型,我把我的问题构造成一个优化问题,我用scipy的differential_evolution来解决这个问题。
到目前为止,很好,我对15-19个参数的简化模型的实现非常满意。
我扩展了模型,现在有32个参数,花费的时间太长了。不是完全出乎意料,但仍然是一个问题,因此问题。在

我见过:
-对RParallel differential evolution
-以及关于这个主题的github问题https://github.com/scipy/scipy/issues/4864

但它希望留在python中(模型在python管道中),pull请求并没有导致正式接受的解决方案,尽管已经提出了一些选项。在

另外,我不能在要优化的函数中并行化代码,因为这是一系列连续的计算,每个都需要上一步的结果。理想的选择是有一些东西可以同时评估一些个体,并将它们返回给人群。在

总结:
-在scipy中有没有一个选项允许并行化差分进化,而我却忽略了这一点?(理想溶液)
-在scipy中是否有一个替代算法的建议,即串行化或并行化速度更快?
-有没有其他好的软件包可以提供并行的差分进化函数?或其他适用的优化方法?
-健全性检查:我是否用32个参数重载DE并需要彻底改变方法?在

PS
我是一名生物学家,正规的数学/统计学并不是我的强项,任何翻译成英语的公式都将不胜感激:)

PPS
作为一个极端的选择,我可以尝试迁移到R,但我不能编码C/C++或其他语言。在


Tags: 方法函数模型github参数过程选项时间
3条回答

Scipydifferential_evolution现在可以非常容易地并行使用,方法是指定worker:

workers int or map-like callable, optional

If workers is an int the population is subdivided into workers sections and evaluated in parallel (uses multiprocessing.Pool). Supply -1 to use all available CPU cores. Alternatively supply a map-like callable, such as multiprocessing.Pool.map for evaluating the population in parallel. This evaluation is carried out as workers(func, iterable). This option will override the updating keyword to updating='deferred' if workers != 1. Requires that func be pickleable.

New in version 1.2.0.

scipy.optimize.differential_evolution documentation

感谢@jp2011指向pygmo

首先,值得注意的是与pygmo1的区别,因为google上的第一个链接仍然指向旧版本。在

其次,多处理岛仅适用于Python3.4+

第三,它起作用了。当我第一次提出这个问题时,我开始的过程还在运行,pygmo群岛在不到3小时的时间内对saDE中存在的18种DE变体进行了广泛的测试。使用Numba的编译版本可能会更早结束。起首部分。在

我个人觉得它比scipy版本更不直观,因为需要构建一个新类(相对于scipy中的single函数)来定义问题,但这可能只是个人偏好。第一次,可能会有人比较模糊地定义交叉点。

另外,我还发现了几个声称并行化DE的选项,我没有亲自测试它们,但是对于在这个问题上遇到问题的人来说可能是有用的。在

鸭嘴兽,专注于多目标进化算法 https://github.com/Project-Platypus/Platypus

Yabox
https://github.com/pablormier/yabox

从亚博克的创造者一个详细的,但IMHO水晶清楚,解释德 https://pablormier.github.io/2017/09/05/a-tutorial-on-differential-evolution-with-python/

我也有同样的问题。也许,你可以试试pygmo,它支持不同的优化算法(包括DE),并且有一个并行计算的模型。然而,我发现社区并不像scipy那么大。他们的教程、文档和示例质量都很好,人们可以从中得到一些东西。在

相关问题 更多 >

    热门问题