Questa domanda è principalmente legata a un problema pratico di ingegneria del software, ma sarei curioso di sapere se i teorici potrebbero fornire maggiori informazioni in merito.
In parole povere, ho una simulazione Monte Carlo che utilizza un generatore di numeri pseudocasuali e vorrei parallelizzarlo in modo che ci siano 1000 computer che eseguono la stessa simulazione in parallelo. Pertanto ho bisogno di 1000 flussi indipendenti di numeri pseudocasuali.
Possiamo avere 1000 flussi paralleli con le seguenti proprietà? Qui dovrebbe essere un PRNG molto noto e ampiamente studiato con tutti i tipi di belle proprietà teoriche ed empiriche.
I flussi sono altrettanto buoni di quelli che otterrei se semplicemente usassi e divido il flusso generato da in 1000 flussi.
Generando il numero successivo in qualsiasi flusso è (quasi) veloce come generare il numero successivo con .
In altre parole: possiamo ottenere più flussi indipendenti "gratis"?
Naturalmente se usassimo semplicemente , scartando sempre 999 numeri e selezionando 1, avremmo sicuramente la proprietà 1, ma perderemmo il tempo di esecuzione per fattore 1000.
Una semplice idea sarebbe quella di usare 1000 copie di , con i semi 1, 2, ..., 1000. Questo sarebbe certamente veloce, ma non è ovvio se i flussi hanno buone proprietà statistiche.
Dopo alcuni googling, ho trovato, ad esempio, quanto segue:
La libreria SPRNG sembra essere progettata esattamente per questo scopo e supporta più PRNG .
Il twister di Mersenne sembra essere un PRNG popolare al giorno d'oggi, e ho trovato alcuni riferimenti a una variante che è in grado di produrre più flussi in parallelo.
Ma tutto ciò è così lontano dalle mie aree di ricerca, che non sono riuscito a capire quale sia realmente lo stato dell'arte e quali costruzioni funzionino bene non solo in teoria ma anche in pratica.
Alcuni chiarimenti: non ho bisogno di alcun tipo di proprietà crittografiche; questo è per il calcolo scientifico. Avrò bisogno di miliardi di numeri casuali, quindi possiamo dimenticare qualsiasi generatore con un periodo .
Modifica: non riesco a usare un vero RNG; Ho bisogno di un PRNG deterministico. In primo luogo, aiuta molto con il debug e rende tutto ripetibile. In secondo luogo, mi permette di fare, ad esempio, la ricerca mediana in modo molto efficiente sfruttando il fatto che posso usare il modello multi-pass (vedi questa domanda ).
Modifica 2: C'è una domanda strettamente correlata @ StackOverflow: generatore di numeri pseudo-casuali per l'ambiente cluster .