Génération de nombres aléatoires

publicité
Génération de nombres aléatoires
Didier Cassereau
Laboratoire d’Imagerie Biomédicale, UPMC CNRS INSERM, Paris, France
ESPCI - Promotion 133
Générateurs aléatoires
Problème posé
Obtenir un générateur de valeurs aléatoires
satisfaisant une loi de probabilité donnée
histogramme proche de cette loi...
Deux grandes classes de méthodes
méthodes physiques
méthodes par calcul
2/10
Générateurs aléatoires
Méthodes physiques
Il faut disposer d’une source d’entropie issue d’une mesure physique
. Paramètres physiques d’environnement
bruit thermique
environnement sonore ou électromagnétique
...
. Paramètres liés à la machine elle-même
les mouvements physiques du disque dur
les frappes au clavier
les déplacements de la souris
le traffic réseau
3/10
Générateurs aléatoires
Méthodes par calcul
La génération repose sur un algorithme numérique
On parle alors de pseudorandom number generator
Algorithme le plus commun : générateur congruentiel linéaire
(
valeur initiale X0 (graine, seed)
Xn+1 = (a · Xn + b) mod m
. générateur à valeurs entières entre 0 et m − 1
. algorithme totalement déterministe
. si la graine ne change pas, on peut rejouer toute la séquence
4/10
Générateurs aléatoires
Méthodes par calcul
Quelques exemples
Xn+1
Xn+1
Xn+1
Xn+1
= (1664525 · Xn + 1013904223) mod 232
= 69069 · Xn mod 232
= 31167285 · Xn mod 248
= 6364136223846793005 · Xn mod 264
Knuth & Lewis
Marsaglia
Lavaux & Jenssens
Haynes
Les risques
initialisation de la graine (porte dérobée en cryptographie)
périodicité du générateur (problème majeur des simulations de type
Monte-Carlo)
statistiques du générateur (biais statistique)
5/10
Générateurs aléatoires
Histogrammes - 1000 générations
rouge = rand(), bleu = random(), vert = drand48()
6/10
Générateurs aléatoires
Histogrammes - 10000 générations
rouge = rand(), bleu = random(), vert = drand48()
7/10
Générateurs aléatoires
Histogrammes - 100000 générations
rouge = rand(), bleu = random(), vert = drand48()
8/10
Générateurs aléatoires
Loi non uniforme
Problème :
. générer des valeurs aléatoires X selon la loi de probabilité
f (x), − ∞ < x < +∞
Approche numérique :
. on construit sa fonction de répartition

Z x

 Φ(x) =
f (u)du
−∞


lim Φ(x) = 0,
x→−∞
lim Φ(x) = 1
x→+∞
. on génère une séquence de nombres aléatoires Y uniformes entre 0 et 1
. pour chaque Y , on calcule X tel que Φ(X ) = Y
9/10
Générateurs aléatoires
Loi normale
1 −x 2 /2
f (x) = √ e
2π
1 1
Φ(x) = + erf
2 2
x
√
2
erf = fonction d’erreur (de Gauss)
1000 générations
10000 générations
10/10
Téléchargement