Python SciPy差异进化:不';即使worker=-1,也不能在多个核上运行
上下文:Python SciPy差异进化:不';即使worker=-1,也不能在多个核上运行,python,numpy,scipy,differential-evolution,Python,Numpy,Scipy,Differential Evolution,上下文: 我正在使用SciPy的差分进化包开发一个优化器。对于worker=1,我得到了一些很好的结果,但是我想加快运行速度 我已经检查了以下线程,即使我添加了如果并设置workers=-1,运行时也完全相同。我在本地机器(2个物理处理器,4个逻辑处理器)或服务器环境(16核)上测试了代码 我测试了以下用例。更改工作人员的数量确实会影响运行时,因此并行处理也会在我的笔记本电脑和服务器上工作 因此,我的假设是,我定义目标和约束函数的方式可能是问题所在 伪代码: 代码是用来工作的,所以我不能分
- 我正在使用SciPy的差分进化包开发一个优化器。对于worker=1,我得到了一些很好的结果,但是我想加快运行速度
- 我已经检查了以下线程,即使我添加了
并设置workers=-1,运行时也完全相同。我在本地机器(2个物理处理器,4个逻辑处理器)或服务器环境(16核)上测试了代码如果
- 我测试了以下用例。更改工作人员的数量确实会影响运行时,因此并行处理也会在我的笔记本电脑和服务器上工作
- 因此,我的假设是,我定义目标和约束函数的方式可能是问题所在
- 代码是用来工作的,所以我不能分享。我的目标函数和约束函数需要很多常量,因此我将它们包装到一个类中。我知道
参数用于此,但约束函数没有该参数args
- 代码结构如下所示:
o=MyClass()
,并使用类模块调用微分进化函数:differential\u evolution(func=o.obj,…)
问题:
- 是否有人遇到过以下问题,即即使设置了多个工人,代码也会在一个工人身上运行
- 对于如何更好地设计目标函数和约束函数,使其符合并行处理的条件,您有什么建议吗
谢谢大家! 首先,我将
obj
方法重命名为\uuuuu调用\uuuu
,然后将对象用作差分进化(o)
。然后我会检查MyClass
pickleable。首先,我会将obj
方法重命名为\uuuu调用
,然后将对象用作差分进化(o)
。然后我会检查MyClass
picklable。
class MyClass:
def __init__(configuration, array1, array2, dataframe):
# assigning attributes so that
self.something = datafame[column1]
...
def obj(self, x):
# based on the initialized values + optimized parameters, it calculates the objective
def cons(self, x):
# based on the initialized values + optimized parameters, it calculates the constraint violations