Учитывая приведенный ниже код, я не могу исправить тот факт, что только ранг 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
MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-
-
-
MPI4PY: только ранг 0, участвуя в Scipy, минимизируется после первой итерации
Anonymous » » в форуме Python - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Scipy минимизируется с линейными ограничениями, пытаясь вызвать объективную функцию в NAN
Anonymous » » в форуме Python - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-