Ich versuche etwas Ähnliches zu tun, wie es in parallelizieren einen Funktionsaufruf mit MPI4PY < /p>
beschrieben ist, aber es gibt einige Dinge, die mich der bereitgestellten Antwort gegenüber skeptisch gegenüber machen. Darüber hinaus habe ich eine Klassenimplementierung, die die Dinge ein wenig anders macht. Hier ist ein "reduzierter" Code, um die Hauptlogik zu demonstrieren: < /p>
from scipy.optimize import minimize
from mpi4py import MPI
import numpy as np
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.Finished = False
def f(x_):
return
def Objective(self, x):
self.x = self.comm.bcast(x if self.rank == 0 else None, root=0)
tstep_select = np.array_split(self.SampleTimes, self.size)[self.rank]
local_results = []
for t in tstep_select:
result = self.f(self.x) # Some function of x
local_results.append( (t, result) )
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)
self.Finished = self.comm.bcast(True, root=0)
return self.Max
else:
while not self.Finished:
self.Objective(None)
if __name__=='__main__':
t_eval = np.linspace(0, 100, 100)
Instance = Solver(SampleTimes=t_eval)
print(Instance.Maximize())
Ich verstehe also, dass ich den Minimierer nur auf Rang 0 aufrufen muss. Zusätzlich muss ich den Rang einbeziehen! = 0 Mitarbeiter, um objektiv zu bewerten. Dies ist die Absicht der if/sonst in der Maximierung . Assimitten, objektiv gibt keine auf allen Rang zurück!
Ich versuche etwas Ähnliches zu tun, wie es in parallelizieren einen Funktionsaufruf mit MPI4PY < /p> beschrieben ist, aber es gibt einige Dinge, die mich der bereitgestellten Antwort gegenüber skeptisch gegenüber machen. Darüber hinaus habe ich eine Klassenimplementierung, die die Dinge ein wenig anders macht. Hier ist ein "reduzierter" Code, um die Hauptlogik zu demonstrieren: < /p> [code]from scipy.optimize import minimize from mpi4py import MPI import numpy as np
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()]
else: while not self.Finished: self.Objective(None)
if __name__=='__main__': t_eval = np.linspace(0, 100, 100) Instance = Solver(SampleTimes=t_eval) print(Instance.Maximize()) [/code] Ich verstehe also, dass ich den Minimierer nur auf Rang 0 aufrufen muss. Zusätzlich muss ich den Rang einbeziehen! = 0 Mitarbeiter, um objektiv zu bewerten. Dies ist die Absicht der if/sonst in der Maximierung . Assimitten, objektiv gibt keine auf allen Rang zurück![code]class Solver(): def __init__(self, SampleTimes, InitialArray): self.comm = MPI.COMM_WORLD self.rank = self.comm.Get_rank() self.size = self.comm.Get_size()
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()]
Ich habe eine Funktion, die durch f (x_0, x_1) = a (x_1 - x_0^2)^2 + (b - x_0)^2 definiert ist, wobei a und b einige Parameter sind:
def f(x):
return a*(x -x **2)**2+(b-x )**2
Ich habe eine (nicht invertierbare) Funktion ak( )
Dies nimmt einen Punkt auf der Oberfläche des Einheitsoktaeders (p: mit |u|+|v|+ |w|. = 1) und gibt einen Punkt auf der Oberfläche der Einheitskugel...
Bearbeiten: Ich habe versucht, diese Anforderungsdatei zu installieren, die diese enthält, und die Fehler treten danach auf
Collecting mpi4py==3.1.5
Downloading mpi4py-3.1.5.tar.gz (2.5 MB)...
Jetzt habe ich einen Klassenloader -Loaderx, der von urlClassloader erbt. Dieser Klassenloader implementiert die folgenden Methoden:
override fun loadClass(name: String, resolve: Boolean): Class {...