首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在scipy.differential_evolution中执行workers参数时出错

在scipy.differential_evolution中执行workers参数时出错
EN

Stack Overflow用户
提问于 2021-05-11 02:27:58
回答 1查看 72关注 0票数 1

我正在尝试学习差分进化方法的并行执行。我使用了文档中的example

代码语言:javascript
复制
from scipy.optimize import rosen, differential_evolution
bounds = [(0,2), (0, 2), (0, 2), (0, 2), (0, 2)]
result = differential_evolution(rosen, bounds, updating='deferred',workers=2)

但它会抛出以下错误:

有人能提出一个解决这个问题的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-11 05:56:27

如果提供了workers参数,该Scipy函数将在幕后使用multiprocessing模块。因此,我们必须在“主模块的安全导入”一节中“使用if __name__ == '__main__'as the documentation insists来保护程序的入口点。

代码语言:javascript
复制
if __name__ == '__main__':
    from scipy.optimize import rosen, differential_evolution
    bounds = [(0,2), (0, 2), (0, 2), (0, 2), (0, 2)]
    result = differential_evolution(rosen, bounds, updating='deferred',workers=2)
    print(result)

Scipy文档中的示例在交互式Python会话中运行,而这不是必需的。但是当作为脚本运行时,我们必须添加代码围栏,以避免您遇到的错误。否则,优化运行将在多个进程中的每个进程中一遍又一遍地开始。

在Linux上运行脚本时,代码栏也不是必需的。在该平台上,工作进程的默认"start method"是"fork“(如错误消息中所述),而不是像在Windows和macOS上那样的”派生“。"fork“方法更轻量级,避免重新启动Python解释器,这就是入口点不需要保护的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67475817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档