Cette question est principalement liée à un problème pratique d'ingénierie logicielle, mais je serais curieux de savoir si les théoriciens pourraient fournir plus d'informations.
En termes simples, j'ai une simulation de Monte Carlo qui utilise un générateur de nombres pseudo-aléatoires, et je voudrais le paralléliser afin qu'il y ait 1000 ordinateurs exécutant la même simulation en parallèle. Par conséquent, j'ai besoin de 1000 flux indépendants de nombres pseudo-aléatoires.
Peut-on avoir 1000 flux parallèles avec les propriétés suivantes? Ici, devrait être un PRNG très connu et largement étudié avec toutes sortes de belles propriétés théoriques et empiriques.
Les flux sont prouvablement aussi bons que ce que j'obtiendrais si j'utilisais simplement et divisais le flux généré par en 1000 flux.X
Génération du numéro suivant dans un cours d' eau est (presque) aussi vite que la génération du numéro suivant avec .
Autrement dit: pouvons-nous obtenir plusieurs flux indépendants "gratuitement"?
Bien sûr, si nous utilisions simplement , en rejetant toujours 999 numéros et en choisissant 1, nous aurions certainement la propriété 1, mais nous perdrions dans le temps d'exécution par le facteur 1000.
Une idée simple serait d'utiliser 1000 copies de , avec les graines 1, 2, ..., 1000. Ce serait certainement rapide, mais ce n'est pas évident si les flux ont de bonnes propriétés statistiques.
Après quelques recherches sur Google, j'ai trouvé, par exemple, ce qui suit:
La bibliothèque SPRNG semble être conçue exactement dans ce but, et elle prend en charge plusieurs PRNG .
Le twister de Mersenne semble être un PRNG populaire de nos jours, et j'ai trouvé quelques références à une variante capable de produire plusieurs flux en parallèle.
Mais tout cela est tellement loin de mes propres domaines de recherche, que je n'ai pas pu déterminer ce qui est vraiment à la pointe de la technologie et quelles constructions fonctionnent bien non seulement en théorie mais aussi en pratique.
Quelques clarifications: je n'ai besoin d'aucune sorte de propriétés cryptographiques; c'est pour le calcul scientifique. J'aurai besoin de milliards de nombres aléatoires, afin que nous puissions oublier tout générateur avec une période de .
Edit: je ne peux pas utiliser un vrai RNG; J'ai besoin d'un PRNG déterministe. Premièrement, cela aide beaucoup au débogage et rend tout reproductible. Deuxièmement, cela me permet, par exemple, de trouver la médiane de manière très efficace en exploitant le fait que je peux utiliser le modèle multi-passes (voir cette question ).
Edit 2: Il y a une question étroitement liée @ StackOverflow: Générateur de nombres pseudo-aléatoires pour l'environnement de cluster .