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