Algorytmy generowania liczb pseudolosowych

12

Jakie algorytmy są stosowane w nowoczesnych generatorach liczb losowych dobrej jakości?

Mehper C. Palavuzlar
źródło
1
Zmieniono tag „zmienna losowa” na „zmienna losowa”, aby zachować spójność z podobnymi pytaniami.
whuber

Odpowiedzi:

10

W R domyślnymi ustawieniami dla generowania liczb losowych są:

  1. Dla U (0,1) użyj algorytmu Mersenne-Twister
  2. W przypadku liczb Guassian użyj odwrócenia liczbowego standardowej funkcji rozkładu normalnego.

Możesz to łatwo sprawdzić, mianowicie.

> RNGkind()
[1] "Mersenne-Twister" "Inversion"

Można zmienić domyślny generator na inne PRNG, takie jak Super-Duper, Wichmann-Hill, Marsaglia-Multicarry, a nawet dostarczony przez użytkownika PRNG. Zobacz? RNGkind, aby uzyskać więcej informacji. Nigdy nie potrzebowałem zmieniać domyślnego PRNG.

Biblioteka C GSL domyślnie używa również Mersenne-Twister .

csgillespie
źródło
Czy jesteś pewien drugiego punktu, generowania normalnych zmiennych losowych poprzez odwrócenie CDF? Odwrotność normalnego CDF jest dość kosztowną funkcją do oceny. Wyobrażam sobie, że metoda Box-Mullera byłaby szybsza. Jeszcze szybsza byłaby zigguratowa metoda Marsaglii do generowania normalnych.
John D. Cook
Uważam to również za podejrzane. Ziggurat Marsaglii jest domyślny w Matlabie i nie wyobrażam sobie, żeby Matlab był lepszy od R w dziedzinie generowania liczb losowych.
shabbychef
@ John Rzeczywiście, metoda polarna jest dostępna w języku R, patrz pakiet setRNG.
chl
3

Xorshift PNG zaprojektowany przez George'a Marsaglia. Jego okres (2 ^ 128-1) jest znacznie krótszy niż Mersenne-Twister, ale algorytm jest bardzo prosty do wdrożenia i nadaje się do równoległości. Działa dobrze na architekturach wielordzeniowych, takich jak układy DSP i Tesla Nvidii.

brotchie
źródło
Czy byłoby to dobre do wdrożenia na GPU? Link do szczegółów, referencje?
DarenW
2
Thomas, Howes, Luk - 2009 - Porównanie procesorów, procesorów graficznych, układów FPGA i macierzy masowo równoległych procesorów do generowania liczb losowych. doi.acm.org/10.1145/1508128.1508139 . Dyskusja + testy porównawcze zestawu plików PNG wykonanych na macierzach procesorów, GPU, FPGA i macierzy masowo równoległych.
brotchie,
Może także RNG L' Ecuyera z wieloma strumieniami ( j.mp/bzJSlm )?
chl
3

Na stronie http://prng.di.unimi.it/ można znaleźć strzelaninę z kilkoma generatorami liczb losowych przetestowanymi za pomocą TestU01, nowoczesnego zestawu testów dla generatorów liczb pseudolosowych, które zastąpiły diehard i dieharder. Możesz wybrać i wybrać.

seba
źródło