You need to enable JavaScript to run this app. 如何结合joblib.parallel实现differential_evolution差分进化并行优化
优惠活动
大模型
产品
解决方案
定价
更多

如何结合joblib.parallel实现differential_evolution差分进化并行优化

问题原因分析

  • 传参错误:调用delayed(differential_evolution)((rosen, bounds))时,你把rosen和bounds打包成了一个元组作为第一个参数传入differential_evolution,不符合函数的入参要求,因此代码直接报错。
  • n_jobs=1等价于串行执行,没有实现并行效果。
  • 额外说明:scipy.optimize.differential_evolution本身已经内置了并行能力,不需要额外封装joblib即可实现内部计算的并行。

解决方案

方案1:直接使用differential_evolution内置并行参数(推荐)

scipy 1.2.0及以上版本的差分进化函数提供了workers参数,直接指定并行进程数即可,无需引入额外依赖:

from scipy.optimize import rosen, differential_evolution

bounds = [(0,2) for _ in range(5)]
# workers设为-1时会自动使用设备所有可用CPU核心
result = differential_evolution(rosen, bounds, workers=-1)
print(result)

这种方式并行的是每一代种群的适应度计算,是单次优化任务内部的并行,性能损耗最低。

方案2:使用joblib实现多轮优化任务并行

如果你需要并行执行多个独立的差分进化优化任务(比如多次重复实验取最优结果),可以用修正后的joblib写法:

from scipy.optimize import rosen, differential_evolution
from joblib import Parallel, delayed

bounds = [(0,2) for _ in range(5)]
# 并行执行5次独立的优化任务,使用所有CPU核心
results = Parallel(n_jobs=-1)(delayed(differential_evolution)(rosen, bounds) for _ in range(5))

# 遍历输出所有结果
for i, res in enumerate(results):
    print(f"第{i+1}次优化结果:\n{res}\n")

注意这里调用delayed包装的函数时,参数需要分开传入,不要额外套一层括号打包成元组。

内容的提问来源于stack exchange,提问作者Charith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 09:15:03