Algoritmi di generazione di numeri pseudo-casuali


Risposte:


10

In R, le impostazioni predefinite per la generazione di numeri casuali sono:

  1. Per U (0,1), utilizzare l'algoritmo Mersenne-Twister
  2. Per i numeri guassiani utilizzare l'inversione numerica della normale funzione di distribuzione normale.

Puoi facilmente controllare questo, vale a dire.

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

È possibile cambiare il generatore predefinito con altri PRNG, come Super Duper, Wichmann-Hill, Marsaglia-Multicarry o persino un PRNG fornito dall'utente. Vedere il? RNGkind per ulteriori dettagli. Non ho mai avuto bisogno di cambiare il PRNG predefinito.

La libreria C GSL utilizza anche Mersenne-Twister per impostazione predefinita.


Sei sicuro del tuo secondo punto, generare normali variabili casuali invertendo il CDF? L'inverso del normale CDF è una funzione abbastanza costosa da valutare. Immagino che il metodo di Box-Muller sarebbe più veloce. Ancora più veloce sarebbe il metodo ziggurat di Marsaglia per generare normali.
John D. Cook,

Lo trovo anche sospetto. Lo Ziggurat di Marsaglia è il default in Matlab e non riesco a immaginare che Matlab sia migliore di R nel campo della generazione casuale di numeri.
shabbychef,

@ Giovanni In effetti, il metodo polare è disponibile in R, vedere il pacchetto setRNG.
chl


3

Xorshift PNG progettato da George Marsaglia. Il suo periodo (2 ^ 128-1) è molto più breve del Mersenne-Twister ma l'algoritmo è molto semplice da implementare e si presta alla parallelizzazione. Funziona bene su architetture a molti core come chip DSP e Tesla di Nvidia.


Sarebbe utile per l'implementazione su GPU? Link a dettagli, riferimenti?
DarenW

2
Thomas, Howes, Luk - 2009 - Un confronto tra CPU, GPU, FPGA e array di processori estremamente paralleli per la generazione casuale di numeri. doi.acm.org/10.1145/1508128.1508139 . Discussione + benchmark di una serie di PNG in esecuzione su CPU, GPU, FPGA e array di processori in parallelo massicciamente.
brotchie,

Forse anche RNG di L'Ecuyer con flussi multipli ( j.mp/bzJSlm )?
chl

3

Su http://prng.di.unimi.it/ puoi trovare una sparatoria di diversi generatori di numeri casuali testati usando TestU01, la moderna suite di test per generatori di numeri pseudocasuali che ha sostituito diehard e dieharder. Puoi scegliere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.