Python 3.x 如何在scipy.optimize.differential_进化中启用并行?

Python 3.x 如何在scipy.optimize.differential_进化中启用并行?,python-3.x,differential-evolution,Python 3.x,Differential Evolution,我正在尝试使用scipy.optimize中的微分进化来寻找函数的全局最小值。如scipy参考指南中所述,我应该在选项中设置: 更新='deferred',workers=核心数 但是,当我运行代码时,它会冻结并且什么也不做。我如何解决这个问题,或者有没有更好的方法来并行化全局优化器 以下是我的代码: scipy.optimize.differential_evolution(objective, bnds, args=(), strategy='best1bin',

我正在尝试使用scipy.optimize中的微分进化来寻找函数的全局最小值。如scipy参考指南中所述,我应该在选项中设置: 更新='deferred',workers=核心数

但是,当我运行代码时,它会冻结并且什么也不做。我如何解决这个问题,或者有没有更好的方法来并行化全局优化器

以下是我的代码:

scipy.optimize.differential_evolution(objective, bnds, args=(), 
            strategy='best1bin', maxiter=1e6,
            popsize=15, tol=0.01, mutation=(0.5, 1),    
            recombination=0.7, seed=None,
            callback=None, disp=False, polish=True,
            init='latinhypercube', atol=0,
            updating='deferred',workers=2)

我自己也遇到了同样的问题。在版本
1.2.0
中添加了对
scipy.optimize.differential_evolution
中并行性的支持,并且我的版本太旧了。在查找文档时,最重要的结果也指的是旧版本。更新的文档可以在上找到

我使用virtualenvironment和pip进行包管理,要升级到最新版本的scipy,我只需运行
pip安装--升级scipy
。如果使用anaconda,您可能需要执行以下操作:例如,
conda安装scipy=1.4.1

为了激活并行性,对于特定数量的内核,将
workers
标志设置为
>1
,或者将
workers=-1
设置为使用所有可用内核


一个警告:不要犯和我一样的错误,尝试在Windows上直接在Python脚本的顶层运行差分进化,因为它不会运行。这是由于
多处理.Pool
的功能。具体而言,不是以下内容:

import scipy.optimize

def minimize_me(x, *args):
    ...  # Your code
    return result

# DO NOT DO LIKE THIS
...  # Prepare all the arguments
# This will give errors
result = scipy.optimize.differential_evolution(minimize_me, bounds=function_bounds, args=extraargs,
                                               disp=True, polish=False, updating='deferred', workers=-1)
print(result)
使用以下代码:

import scipy.optimize

def minimize_me(x, *args):
    ...  # Your code
    return result

# DO LIKE THIS
if __name__ == "__main__":
    ...  # Prepare all the arguments
    result = scipy.optimize.differential_evolution(minimize_me, bounds=function_bounds, args=extraargs,
                                                   disp=True, polish=False, updating='deferred', workers=-1)
    print(result)
有关Windows上并行执行的更多信息,请参阅本文:
请注意,即使不是在Windows上,如果uuu name uuu==“uuu main uuuu”:

使用Spyder运行此代码时,它也会给我以下错误:differential_evolution()得到一个意外的关键字参数“updateing”,我安装了conda,而不是使用IDLE,现在它的工作原理是,从你的评论到,我会给它一个机会,让你知道。您可以添加您正在使用的目标、边界和scipy版本吗?另外,关于
workers
参数,您在哪里找到的?我在网页上找不到它不幸的是,有人知道为什么吗?@Varlor可能是你代码的特定内容,也许可以分享一些细节?