750 likes | 1.22k Views
Génération de nombres aléatoires. WRIGHT Nicolas – WOLMER Julien. Avant propos. « Quiconque considère des méthodes arithmétiques pour produire des nombres aléatoires est, bien sûr, en train de commettre un péché » - John Von Neumann
E N D
Génération de nombres aléatoires WRIGHT Nicolas – WOLMER Julien
Avant propos • « Quiconque considère des méthodes arithmétiques pour produire des nombres aléatoires est, bien sûr, en train de commettre un péché » - John Von Neumann • « La génération de nombres aléatoires est trop importante pour être confiée au hasard » - Robert R. Coveyou du Oak Ridge National Laboratory
Sommaire • Introduction • Comment ça marche • Propriétés d’un bon générateur aléatoire • Générateurs à congruence linéaire • GCL multiplicatif • Générateurs de Tausworthe • Générateur de Fibonacci éloignés • Générateur combiné • Aperçu de générateurs de nombres aléatoires • Sélection du germe • Mythes au sujet de génération de nombres aléatoires • Conclusion • Questions
Introduction • Une étape clé des simulations • La Génération de Nombres Aléatoires : générer des valeurs aléatoires pour des variables avec une distribution spécifique (par exemple : normale, exponentielle… ).
Introduction • La G.N.A. : • Génération d’une séquence uniformément distribuée entre 0 et 1. • Transformation de la séquence afin d’obtenir des valeurs dans la distribution désirée. C’est cette première étape qui va être traitée
Comment ça marche • La méthode la plus répandue est l’utilisation d’une relation récursive :
Comment ça marche • Par exemple : • Alors avec on obtient : • Les 32 premiers nombres obtenus sont : 10, 3, 0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5.
Comment ça marche • Les X ainsi générés sont donc divisés par 16 pour obtenir une séquence comprise en 0 et 1. • Pour cet exemple : 0.625, 0.1875, 0, 0.0625, 0.375, 0.9375, 0.75, 0.8125, 0.125, 0.6875, 0.5, 0.5625, 0.875, 0.4375, 0.25, 0.3125, 0.625, 0.1875, 0, 0.0625, 0.375, 0.9375, 0.75, 0.8125, 0.125, 0.6875, 0.5, 0.5625, 0.875, 0.4375, 0.25, 0.3125
Comment ça marche • Si la fonction génératrice est connue, il est possible de retrouver la séquence à chaque fois que la valeur de départ x0 est donnée. • Cette valeur utilisée pour initialiser la séquence est appelée le germe.
Comment ça marche • Dans cette exemple f est déterministe : • Si le germe est connu, la séquence est connue. • Ces nombres sont donc partiellement aléatoires, ils sont appelés pseudo aléatoires. Il est alors possible de répéter une simulation avec exactement les mêmes aspects aléatoires.
Comment ça marche • Dans cet exemple la séquence n’est qu’une répétition cyclique de ses 16 premiers nombres. On parle d’une longueur de cycle de 16.
Comment ça marche • Certain générateur ne répète pas la première partie de la séquence alors appelé la queue • Dans ce cas la période du générateur est égale à : Taille Queue + Longueur Cycle.
Propriétés d’un bon générateur aléatoire • Il doit être calculable efficacement. • Sa période doit être importante. • Les valeurs successives doivent être indépendantes et uniformément distribués.
Générateurs à congruence linéaire • C'est D. H. Lehmer qui l'inventa en 1951. • Il est défini de la manière suivante : • On choisit un entier m et on travaille dans le groupe Zm des entiers modulo m. • Soient a ; b ЄZm. Le générateur congruent linéaire est défini par la relation de récurrence suivante : m est le modulo du générateur a est son multiplicateur b est son incrément y0 est son germe
Générateurs à congruence linéaire • On obtient alors une suite {Xn} de variables aléatoire uniformes sur [0,1[ en posant : • La période de la suite, bien évidemment plus petite ou égale à m puisque Zm possède m éléments, peut être rendue maximale en choisissant bien les paramètres du générateur.
Générateurs à congruence linéaire • La période de la suite {yn} est égale à m si et seulement si les trois conditions suivantes sont satisfaites : • pgdc(b;m) = 1 • a = 1 mod p, pour tout premier p divisant m • a = 1 mod 4 dans le cas où m est un multiple de 4
Générateurs à congruence linéaire • Un générateur dont la période est maximum est un générateur pleine période. • Tous les générateurs pleines périodes ne sont pas aussi bons, avec la même période :
GCL multiplicatif • C’est le générateur a congruence linéaire présenter précédemment pour lequel b=0 • Dans le GCL multiplicatif l’addition n’est donc pas impliquée. • Il a pour forme :
GCL multiplicatif • Les GCL multiplicatif sont plus efficaces que les GCL mixtes (temps processeur) • Cette efficacité est encore accru si m est une puissance de 2 • Il est donc possible de classer les GCL multiplicatifs en 2 types : • m=2k • m≠2k
GCL multiplicatif avec m=2k • Le modulo est rendu plus simple à calculer. • La période maximale ne fais q’un quart de la pleine période, soit 2k-2. • La période maximale est atteinte si et seulement si le multiplicateur a est de la forme 8i±3, et si le germe est impair.
GCL multiplicatif avec m=2k • Exemple : Avec x0=1 impair, la période est de 8 ce qui représente bien ¼ de 25. Avec x0=2 pair, la période n’est plus que de 4.
GCL multiplicatif avec m=2k • Exemple : Ici le multiplicateur a n’est pas de la forme 8i±3, avec un germe x0=1 impair, la période n’est que de 4. Il est donc important de vérifier les 2 conditions évoquées précédement afin d’obtenir une période maximale.
GCL multiplicatif avec m≠2k • Pour résoudre le problème de courte période, il faut choisir m premier. • Avec le bon choix pour le multiplicateur a on peut avoir une période de m-1 un tel GCLM est considérer comme pleine période. • Avec ce type GCLM on a forcément xn≠0 si m est premier, on a xnЄ[1 ; m-1].
GCL multiplicatif avec m≠2k • Tout les multiplicateurs n’entraînent pas une efficacité égale. • En effet la période est maximale si a est une racine primitive de m, pour n=1,2,…,m-2 :
GCL multiplicatif avec m≠2k • Exemple : Le GCLM suivant est pleine période. • 231-1 = 2 147 483 647 est premier. • 75 est une de ces 534 600 000 racine primitive
GCL multiplicatif avec m≠2k • Problèmes : • Les calculs doivent être effectués sans débordement, la troncature peut affecter la période. • Le facteur axn-1 peut également provoquer des dépassements de capacité.
GCL multiplicatif avec m≠2k • Solution de Schrage (1979) basé sur l’identité suivante: • Cette méthode ne s’applique pas si r<q
Générateurs de Tausworthe • Proposé par Tausworthe en 1965 • Application en cryptographie • Génération de longs nombres aléatoires • Séquence aléatoire de nombre binaire divisée en chaînes de longueurs choisies
Générateurs de Tausworthe • Sa forme générale est : Où ci et bi sont des variables binaires • Le générateurs utilise les q derniers bits de la séquence, il est alors appelé séquence autorégressive d’ordre q ou AR(q). • Un générateur AR(q) peut avoir une période maximale de 2q-1.
Générateurs de Tausworthe • Notons D un opérateur de délais tel que Dbn=bn+1 alors :
Générateurs de Tausworthe • Ce polynôme est appelé caractéristique, on l’écrit en remplaçant D par x :
Générateurs de Tausworthe • La période du générateur dépend de la caractéristique. • C’est le plus petit entier positif n tel que xn-1 soit divisible par la caractéristique. • Pour un polynôme d’ordre q la plus grande période possible est 2q-1. • Un polynôme donnant une période maximale est appelé polynôme primitif.
Générateurs de Tausworthe • A partir d’une séquence AR(q), Tausworthe propose de construire des nombres xn de l bits • La séquence de bits bn est fractionnée en groupes successifs de s bits • Les l premiers bits de chaque groupe sont utilisés comme une fraction binaire qui s’exprime :
Générateurs de Tausworthe • On prendra s constante, s ≥ l • Pour s’assurer que les nombres générer n’aient aucun bit commun. • s premier par rapport à 2q-1 • Pour garantir que les nombres de l bits sont tirés dans une période entière.
Générateurs de Tausworthe • Les nombres de l bit générés par l’équation précédente ont les propriétés suivantes : • L’espérance de la séquence est ½ • La variance est de 1/12 • La corrélation de la série est 0
Générateurs de Tausworthe • Exemple : considérons le polynôme x7+x3+1
Générateurs de Tausworthe • Avec b0=b1=…=b6=1, nous obtenons la séquence suivante :
Générateurs de Tausworthe • La séquence complète est : 1111111 0000111 0111100 1011001 0010000 0010001 0011000 1011101 0110110 0000110 0110101 0011100 1111011 0100001 0101011 1110100 1010001 0111111 1000011 1000000 • Les 7 premiers bits forment le germe. • La séquence ce répète tout les 127 bits. • 27-1=127, le polynôme x7+x3+1 est primitif.
Générateurs de Tausworthe • Les séquences de Tausworthe peuvent aisément être générées matériellement par des registres à décalage. Polynôme général de degré q
Générateur de Fibonacci éloignés • Une séquence de Fibonacci est générée par la relation : • Elle peut être utilisée pour la G.N.A. en la modifiant ainsi : • On utilise la 5ème et la 17ème plus récente valeur pour réduire au mieux la corrélation.
Générateur de Fibonacci éloignés • Marsaglia (1983) montre que ce générateur passe les tests statistiques • L’implémentation qu’il recommande utilise 17 emplacements de stockage L[1]…L[17].
Générateur de Fibonacci éloignés • A l’initialisation les 17 emplacements sont remplis avec des entiers pas tous pairs • Deux pointeurs sont mis en place i sur 5 et j sur 17 • Chaque itération fait appel à la procédure suivante : x:=L[i]+L[j]; L[i]:=x; i:=i-1; IF i=0 THEN i:=17; j:=j-1; IF j=0 THEN i:=17; Return x;
Générateur de Fibonacci éloignés • La période du générateur est 2k(217-1) • La période d’un tel générateur est donc considérablement plus longue qu’avec un GCL. • Pour k=8 la période est de 1.6*107 • Pour k=16 la période est de 4.3*109 • Pour k=32 la période est de 2.8*1014
Générateur combiné • Il est possible de combiner plusieurs générateurs pour en former un meilleur. • Il existe trois techniques de combinaison : • Ajouter des nombres obtenus par 2 générateurs ou plus. • Appliquer un ou-exclusif entre des nombres obtenus par 2 générateurs ou plus. • Battage (Shuffle) consiste à sélectionner au hasard un nombre aléatoire parmi plusieurs.
Aperçu de générateurs de nombres aléatoires • Exemple d’un GCL multiplicatif populaire • Très utilisé dans les année 70, 80 par IBM (SIMPL/I ; APL) , Prime Computer (PRIMOS), International Mathematical and Statistical Libraries… • Park & Miller l’appelle le ‘minimal standard’
Aperçu de générateurs de nombres aléatoires • Fishman & Moore (1986) ont comparé les GCL multiplicatifs pleine période de module m=231-1 sur la base de l’efficacité de leur implémentation et de leur aspect aléatoire. • Ces deux générateurs semblent être les meilleurs :
Aperçu de générateurs de nombres aléatoires • UNIX utilise ce GCL combiné : • Comme tout les GCL de module m=2k, sa représentation binaire comporte configuration cyclique.
Aperçu de générateurs de nombres aléatoires • Un grand nombre de générateurs est proposé dans la littérature. • Chaque nouvelle proposition vient corriger les problèmes d’anciens générateurs • Attention beaucoup de générateurs considérés comme bons autrefois ne le sont plus maintenant
Aperçu de générateurs de nombres aléatoires • Il est bien plus sage d’utiliser un générateur établi ayant été testé complètement que d’en inventer un nouveau.
Sélection du germe • Le choix du germe utilisé ne doit pas affecter la simulation. • Cependant une mauvaise combinaison du germe et du générateur peut mener à des conclusions erronés.