Python 如何通过scipy.optimize.differential_evolution的并行版本使函数可拾取,从而使其最小化

Python 如何通过scipy.optimize.differential_evolution的并行版本使函数可拾取,从而使其最小化,python,parallel-processing,minimize,scipy-optimize,differential-evolution,Python,Parallel Processing,Minimize,Scipy Optimize,Differential Evolution,我需要使用差分进化的scipy实现最小化一个函数。 我想利用并行性来加速计算,并尝试将workers设置为-1 我得到一个错误,搜索发现问题是我试图最小化的函数不可拾取。 我需要帮助来了解如何使它可拾取 最小化工作的功能如下所示: 类对象有一个属性向量,即观察到的数据 该类的一种方法获取一些参数并计算向量的估计值 最小化计算向量和计算估计值之间的均方误差的函数 函数的伪代码可以是这样的: def function_to_minimize(self, parameters): true

我需要使用差分进化的scipy实现最小化一个函数。 我想利用并行性来加速计算,并尝试将workers设置为-1

我得到一个错误,搜索发现问题是我试图最小化的函数不可拾取。 我需要帮助来了解如何使它可拾取

最小化工作的功能如下所示:

  • 类对象有一个属性向量,即观察到的数据
  • 该类的一种方法获取一些参数并计算向量的估计值
  • 最小化计算向量和计算估计值之间的均方误差的函数
函数的伪代码可以是这样的:

def function_to_minimize(self, parameters):
    true_vector = self.true_vector
    estimated_vector = self.estimate_vector(parameters)
    return mse(true_vector, estimated_vector)

像这样的方法应该会奏效:

class Objective(object):
    def __init__(self, data):
        self.measured_data = data

    def __call__(self, parameters):
        # need to return a scalar value
        estimated_vector = self.estimate_vector(parameters)
        return np.sum(np.power(self.measured_data - estimated_vector, 2))

    def estimate_vector(parameters):
        # calculate what you expect to happen with the parameters
        pass
您应该将
目标(数据)
传递给
差异进化
作为最小化的函数。在使用
spawn
作为创建新进程默认方式的macOS和Windows上,此功能应为