MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерацииPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации

Сообщение Anonymous »

Учитывая приведенный ниже код, я не могу исправить тот факт, что только ранг 0 участвует в оценках Objective после первой итерации (SCIPY) минимизатора. Очевидно, что ранжирование! = 0 работников завершают свои первоначальные задачи, и минимизатор не переходит на этих работников. Мой вопрос: Как могу их переехать?
from scipy.optimize import minimize, OptimizeResult
from mpi4py import MPI
import numpy as np
import logging

logging.basicConfig(filename='job.log', level=logging.INFO)

class Solver():
def __init__(self, SampleTimes, InitialArray):
self.comm = MPI.COMM_WORLD
self.rank = self.comm.Get_rank()
self.size = self.comm.Get_size()

self.SampleTimes = SampleTimes
self.InitialArray = InitialArray

self.Max = None

def f(self, x_):
return np.sum(x_)

def Objective(self, x):

logging.info(f"Entering Objective on rank {self.rank}")
self.x = self.comm.bcast(x if self.rank == 0 else None, root=0)
logging.info(f"Logging x: {self.x}")

if not isinstance(self.x, OptimizeResult):

tstep_select = np.array_split(self.SampleTimes, self.size)[self.rank]

local_results = []
for t in tstep_select:
logging.info(f"Processing t={t} on rank {self.rank}")
result = t*self.f(self.x)
local_results.append( (t, result) )
logging.info(f"Response for t={t}: {local_results[-1][-1]}")

all_results = self.comm.gather(local_results, root=0)

if self.rank==0:
all_results = [item for sublist in all_results for item in sublist]
all_results = np.array(all_results)
all_results = all_results[all_results[:,0].argsort()]

scalar = np.trapz(all_results[:,1], all_results[:,0])

return -scalar

def Maximize(self,):

if self.rank == 0:
self.Max = minimize(self.Objective, self.InitialArray)
print(self.Max)

else:
while not self.Max:
self.Objective(None)

self.Max = self.comm.bcast(self.Max if self.rank==0 else None, root=0)

if __name__=='__main__':
t_eval = np.linspace(0, 100, 100)
a_init = np.random.rand(10)
Instance = Solver(SampleTimes=t_eval, InitialArray=a_init)
Instance.Maximize()


Подробнее здесь: https://stackoverflow.com/questions/796 ... -iteration
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Scipy минимизируется с кондиционированием
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Scipy минимизируется с линейными ограничениями, пытаясь вызвать объективную функцию в NAN
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Как использовать mpi4py со scipy
    Гость » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»