Я пытаюсь выполнить многозапускную оптимизацию с использованием циклов for
(оптимизация выполняется с использованием scipy.optimize.minimize
).
from scipy.optimize import minimize
def multistart optimizer(func, x):
x_mins = []
fvals = []
n = x.shape[1]
for i in range(x.shape[0]):
optRes = minimize(func, x0 = x[i], bounds = ((0,1),)*n, tol = 1.e-6)
x_mins.append(optRes.x)
fvals.append(optRes.fun)
fval = min(fvals)
x_min = x_mins[np.argmin(fvals)]
return x_min, fval
Это прекрасно работает до тех пор, пока размер начальных начальных точек (x
, в данном случае) не увеличится, а время, необходимое для выполнения цикла for
, увеличится. Поэтому я хочу использовать несколько процессоров для ускорения процесса в цикле for
(поскольку каждый цикл не зависит друг от друга, это должно приводить к одному и тому же).
Я изо всех сил пытаюсь найти только правильный код. Было много примеров использования модуля multiprocessing
, но я не могу понять, как их реализовать.
Другой вопрос заключается в том, что все примеры, по-видимому, выполняют распараллеливание внутри своего кода с использованием if __name__ == '__main__':
. Мне было интересно, можно ли этого избежать и запустить параллельный цикл без него. Точнее, если у меня есть цикл, который определен в файле loop.py
, и я запускаю его на нескольких процессорах, используя main.py
, возможно ли это будет?