微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将可调用的“类似地图”传递给 scipy 的差异进化

如何解决将可调用的“类似地图”传递给 scipy 的差异进化

我有一个现有的多处理池,可用于其他函数,我想将其传递给different_evolution,但我似乎无法正确设置工作程序输入。这可能吗? docsworkers 应该是

...类似地图的可调用对象,例如用于并行评估总体的 multiprocessing.Pool.map。

我试过了:

import multiprocessing as mp
from scipy.optimize import rosen,differential_evolution

pool = mp.Pool(2)  # existing worker pool

bounds = [(0,2),(0,2)]
result = differential_evolution(rosen,bounds,updating='deferred',workers=pool)
# TypeError: int() argument must be a string,a bytes-like object or a number,not 'Pool'

result = differential_evolution(rosen,workers=pool.map)
# RuntimeError: The map-like callable must be of the form f(func,iterable),returning a sequence of numbers the same length as 'iterable'

谢谢。

解决方法

对我来说,你的第二个解决方案正在奏效

import multiprocessing as mp
from scipy.optimize import rosen,differential_evolution

pool = mp.Pool(2)  # existing worker pool

bounds = [(0,2),(0,2)]

result = differential_evolution(rosen,bounds,updating='deferred',workers=pool.map)
result

输出

     fun: 0.0
 message: 'Optimization terminated successfully.'
    nfev: 51006
     nit: 679
 success: True
       x: array([1.,1.,1.])

我的 scipy 版本是

import scipy
print(scipy.__version__)
1.6.1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。