0

我正在尝试在 scipy.optimize 的最小化函数调用的成本函数中使用多处理。在成本函数内部,我有一个要并行计算的循环。

代码的简化版本如下:

import numpy as np
from scipy.optimize import minimize
import multiprocessing as mp


def cost_fun(Z, arg1, arg2):
    f = 0
    shift_args = []
    for k in range(8):
        shift_args.append((arg1[ :, k], arg2[ :, k]))
    p = mp.Pool(mp.cpu_count())
    R = p.starmap(calc_R, shift_args)
    p.close()
    f = f + sum([s**2 for s in R])*Z

    return f

def calc_R(x, y):
    print('You are here')
    return x[0] * y[3]


tmp = minimize(fun=cost_fun, x0=1, method='BFGS', options={'disp': False, 'gtol': 1e-10}, args = (np.random.rand(10,8), np.random.rand(10,8)))

R = p.starmap(calc_R, shift_args)代码在该行冻结。

如何进行多处理?

非常感谢任何帮助。

4

0 回答 0