Algorithmes de génération de nombres pseudo-aléatoires


Réponses:


10

Dans R, le paramètre par défaut pour la génération de nombres aléatoires est:

  1. Pour U (0,1), utilisez l'algorithme de Mersenne-Twister
  2. Pour les nombres guassiens, utilisez l'inversion numérique de la fonction de distribution normale standard.

Vous pouvez facilement vérifier cela, à savoir.

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

Il est possible de remplacer le générateur par défaut par d'autres PRNG, tels que Super-Duper, Wichmann-Hill, Marsaglia-Multicarry ou même un PRNG fourni par l'utilisateur. Voir le? RNGkind pour plus de détails. Je n'ai jamais eu besoin de changer le PRNG par défaut.

La bibliothèque C GSL utilise également le Mersenne-Twister par défaut.


Êtes-vous sûr de votre deuxième point, générer des variables aléatoires normales en inversant le CDF? L'inverse du CDF normal est une fonction assez coûteuse à évaluer. J'imagine que la méthode de Box-Muller serait plus rapide. Plus rapide encore serait la méthode en ziggourat de Marsaglia pour générer des normales.
John D. Cook

Je trouve également cela suspect. Ziggurat de Marsaglia est la valeur par défaut dans Matlab, et je ne peux pas imaginer que Matlab soit meilleur que R dans le domaine de la génération de nombres aléatoires.
shabbychef

@John En effet, la méthode polaire est disponible en R, voir le package setRNG.
chl


3

Le Xorshift PNG conçu par George Marsaglia. Sa période (2 ^ 128-1) est beaucoup plus courte que celle de Mersenne-Twister mais l'algorithme est très simple à mettre en œuvre et se prête à la parallélisation. Fonctionne bien sur les architectures à plusieurs cœurs telles que les puces DSP et Tesla de Nvidia.


Serait-ce bon pour l'implémentation sur des GPU? Lien vers les détails, les références?
DarenW

2
Thomas, Howes, Luk - 2009 - Une comparaison des processeurs, des GPU, des FPGA et des matrices de processeurs massivement parallèles pour la génération de nombres aléatoires. doi.acm.org/10.1145/1508128.1508139 . Discussion + benchmarks d'un ensemble de fichiers PNG exécutés sur CPU, GPU, FPGA et matrices de processeurs massivement parallèles.
brotchie

Peut-être aussi le RNG de L'Ecuyer avec plusieurs flux ( j.mp/bzJSlm )?
chl

3

À http://prng.di.unimi.it/ vous pouvez trouver une fusillade de plusieurs générateurs de nombres aléatoires testés à l'aide de TestU01, la suite de tests moderne pour les générateurs de nombres pseudo-aléatoires qui ont remplacé diehard et dieharder. Vous pouvez choisir.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.