Python 3.x 如何在scipy.optimize.differential_进化中启用并行?
我正在尝试使用scipy.optimize中的微分进化来寻找函数的全局最小值。如scipy参考指南中所述,我应该在选项中设置: 更新='deferred',workers=核心数 但是,当我运行代码时,它会冻结并且什么也不做。我如何解决这个问题,或者有没有更好的方法来并行化全局优化器 以下是我的代码: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.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可能是你代码的特定内容,也许可以分享一些细节?