Pytanie to dotyczy przede wszystkim praktycznego problemu z inżynierią oprogramowania, ale z ciekawością dowiedziałbym się, czy teoretycy mogliby uzyskać wgląd w ten problem.
Mówiąc prościej, mam symulację Monte Carlo, która korzysta z generatora liczb pseudolosowych i chciałbym go zrównoleglić, aby 1000 komputerów działało równolegle z tą samą symulacją. Dlatego potrzebuję 1000 niezależnych strumieni liczb pseudolosowych.
Czy możemy mieć 1000 równoległych strumieni o następujących właściwościach? Tutaj powinien być bardzo dobrze znanym i szeroko badanym PRNG o wszelkiego rodzaju ładnych właściwościach teoretycznych i empirycznych.
Strumienie są tak dobre, jak to, co bym otrzymał, gdybym po prostu użył i podzielił strumień wygenerowany przez X na 1000 strumieni.
Generowanie następny numer w każdym strumieniu jest (prawie) tak szybko jak generowanie następny numer z .
Innymi słowy: czy możemy uzyskać wiele niezależnych strumieni „za darmo”?
Oczywiście, gdybyśmy po prostu użyli , zawsze odrzucając 999 liczb i wybierając 1, wtedy z pewnością mielibyśmy właściwość 1, ale stracilibyśmy w czasie działania o współczynnik 1000.
Prostym pomysłem byłoby użycie 1000 kopii , z nasionami 1, 2, ..., 1000. To z pewnością byłoby szybkie, ale nie jest oczywiste, czy strumienie mają dobre właściwości statystyczne.
Po pewnym Googlingu znalazłem na przykład:
SPRNG biblioteka wydaje się być zaprojektowany do tego celu dokładnie i obsługuje wiele PRNGs .
Wydaje się, że Mersenne Twister jest obecnie popularnym PRNG, i znalazłem kilka odniesień do wariantu, który jest w stanie wytwarzać wiele strumieni równolegle.
Ale to wszystko jest tak dalekie od moich własnych obszarów badawczych, że nie mogłem dowiedzieć się, co tak naprawdę jest najnowocześniejsze i które konstrukcje działają dobrze nie tylko w teorii, ale także w praktyce.
Kilka wyjaśnień: Nie potrzebuję żadnych właściwości kryptograficznych; to jest do obliczeń naukowych. Potrzebuję miliardów liczb losowych, abyśmy mogli zapomnieć o dowolnym generatorze z okresem .
Edycja: Nie mogę użyć prawdziwego RNG; Potrzebuję deterministycznego PRNG. Po pierwsze, bardzo pomaga w debugowaniu i sprawia, że wszystko jest powtarzalne. Po drugie, pozwala mi to np. Bardzo efektywnie wyszukiwać medianę, wykorzystując fakt, że mogę korzystać z modelu wieloprzebiegowego (patrz to pytanie ).
Edycja 2: Istnieje ściśle powiązane pytanie @ StackOverflow: Generator liczb pseudolosowych dla środowiska klastrowego .