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