Nel mio programma ho bisogno di eseguire N thread separati ciascuno con il proprio RNG che viene utilizzato per campionare un set di dati di grandi dimensioni. Devo essere in grado di seminare l'intero processo con un singolo valore in modo da poter riprodurre i risultati.
È sufficiente aumentare semplicemente in sequenza il seme per ciascun indice?
Attualmente uso numpy
s' RandomState
che utilizza una pseudo-casuali generatore di numeri Mersenne Twister.
Snippet di codice qui sotto:
# If a random number generator seed exists
if self.random_generator_seed:
# Create a new random number generator for this instance based on its
# own index
self.random_generator_seed += instance_index
self.random_number_generator = RandomState(self.random_generator_seed)
In sostanza, inizio con un seed immesso dall'utente (se esiste) e per ogni istanza / thread aggiungo in sequenza l'indice (da 0 a N-1) dell'istanza in esecuzione. Non so se questa è una buona pratica o se esiste un modo migliore per farlo.