Vous êtes sur la page 1sur 23
II. Les Générateurs de nombres pseudo-aléatoires d ISG de Tunis H éd i essi
II. Les Générateurs de nombres
pseudo-aléatoires
d
ISG de Tunis
H
éd
i essi

Introduction

Les méthodes de simulation reposent toutes sur la capacité à produire une suite de variables aléatoires indépendantes suivant une distribution f donnée.

La production d’une telle suite dépend elle-même de la capacité que l’on a à produire une séquence de variables aléatoires uniformes et indépendantes.

En

rati ue

la

roduction

ar des mo ens informati ues d’une suite de variables

q uniformes iid est impossible : toute suite de nombres résulte de la mise en œuvre d’un algorithme, et par conséquent est déterministe.

p

q

,

p

p

y

L’objectif que l’on s’assigne n’est donc pas la production de véritables variables aléatoires, mais la production de séquences déterministes imitant le mieux possible le comportement d’une suite de variables aléatoires uniformes iid : on parle de nombres pseudo- aléatoires.

2222 Les méthodes de Simulation

Janvier 2012

L’utilisation de tout algorithme destiné à produire des suites de nombres aléatoires uniformément répartis sur [0, 1] doit donc être validée par la mise en œuvre de tests statistiques dont l’hypothèse nulle H 0 est :

H 0 : U 1 ,U 2 ,

,U

n sont iid de loi uniforme sur [0, 1].

On peut pour cela considérer des tests classiques d’adéquation à une loi donnée

(test du Khideux, test de Kolmogorov-Smirnov, test de Cramer-von Mises) ou tout autre

t

e de tests re osant sur H

p

yp

0 .

Dans la pratique, un générateur de nombres pseudo-aléatoire peut sembler correct car validé par un ensemble de tests, mais il est toujours possible de construire un nouveau test invalidant l’hypothèse d’uniformité.

Il convient donc d’être pragmatique lors du choix d’un générateur de nombres pseudo-aléatoire : ce choix doit tenir compte des caractéristiques de l’application envisagée.

3333 Les méthodes de Simulation

Janvier 2012

Formellement une suite de nombres pseudo-aléatoires est une suite de nombres possédant les mêmes propriétés qu’une suite de nombres aléatoires, mais générée à travers une procédure déterministe.

Les nombres pseudo-aléatoires sont donc générés par des fonctions mathématiques (ou par des algorithmes).

Un Générateur de Nombres Aléatoires, ou RNG, est donc un programme qui génère des nombres pseudo-aléatoires à partir d’un ordinateur.

Toute suite de nombres dont la distribution ne diffère pas significativement d’une distribution uniforme et dont la dépendance n’est pas significative est considérée comme une suite de nombres aléatoires.

4444 Les méthodes de Simulation

Janvier 2012

La plupart des algorithmes pour la génération de nombres pseudo-aléatoires ont pour but de produire des suites uniformément distribues, qui peuvent ensuite être transformés en des variables aléatoires issues d’autres distributions.

Il est impossible de présenter dans ce chapitre tous les générateurs de nombres pseudo-aléatoires utilisés. Dans les sections suivantes, nous présentons quelques uns fournis par les systèmes ou portatifs. La plupart des générateurs sont de type « congruenciel ».

Toutefois, avant de définir ces types de générateurs, nous présentons une méthode de génération des nombres pseudo-aléatoires, bien que dépassée par des techniques plus performantes, elle nous servira comme illustration :

la méthode du carrée médian (middle square).

5555 Les méthodes de Simulation

Janvier 2012

1. Un exemple historique : La méthode du carré médian

Cette méthode est introduite par JohnVon Neumann (1951).

Le carrée médian est considéré comme la première méthode de génération automatique de nombres pseudo-aléatoires.

6666 Les méthodes de Simulation

Janvier 2012

Exemple :

Soit d 0 un nombre compris entre 0 et 1, par exemple d 0 = 0.9175. Nous

l’élevons au carré en prenant 8 décimales :

d 0

2

= 0.84180625.

Parmi ces 8 décimales, nous prenons les 4 du milieu et nous formons d 1 = 0.1806.

D

e nouveau, nous

d

1 2 = 0.03261636.

él

evons

d

é

t 8 dé

1 au carr e en prenan

i

l

c ma es :

Nous sortons les 4 décimales du milieu : d 2 = 0.2616, et ainsi de suite.

Nous avons alors la suite des nombres pseudo-aléatoires :

d 0 = 0.9175; d 1 = 0.1806; d 2 = 0.2616;

7777 Les méthodes de Simulation

Janvier 2012

Plus généralement, on génère une suite de nombres ayant chacun m chiffres, où m est un nombre pair. Le successeur d’un nombre de cette suite est obtenu en élevant ce nombre au carré puis en en retenant les m chiffres du milieu. Ce raisonnement donne lieu à l’algorithme suivant pour générer une suite de nombres en base 10 :

(a) initialisation : choisir un nombre x 0 à m chiffres ; i := 0 et

(b)

itération: i := i + 1 ;

x

i

+ 1

:

=  

x

2

i

/ 10

m

/2

 

mod 10

m

u

0 = x 0 / 10 m

[z] signifie partie entière de z et a mod b est égale au reste de la division de a par b.

La suite des u i contient alors les nombres pseudo-aléatoires obtenus par la méthode du carré médian.

8888 Les méthodes de Simulation

Janvier 2012

Cette méthode paraît donner de bons résultats. Cependant ce n’est pas le cas, car très souvent les nombres s’approchent de 0 pour y rester, ou produisent un cycle trop court de chiffres qui se répète indéfiniment.

Considérons l’exemple où x 1 = 1926 et m = 4, et la suite se réduit à 0 après 27 itérations !

9999 Les méthodes de Simulation

Janvier 2012

10101010 Les méthodes de Simulation Janvier 2012

10101010 Les méthodes de Simulation

Janvier 2012

La méthode du carré médian ne garantit donc pas la production de suites de nombres aléatoires, et c’est pourquoi elle a été abandonnée depuis longtemps.

11111111 Les méthodes de Simulation

Janvier 2012

2. Les générateurs congruenciels

Les générateurs de type congruenciel fournissent des nombres pseudo- aléatoires définie par la relation de récurrence suivante :

x

i

=

(

ax

i 1

+

b

)

mod

m

pour i = 1, 2,

le multiplicateur, b est l’accroissement, m le module et x 0 la valeur initiale ou seed.

et a, b, m et x 0 des entiers positifs donnés. On dit que a est

La notation mod m signifie qu’après avoir divisé

ax

i 1

+

b

par m on ne

considère que le reste de la division, qui constitue alors le nouveau nombre

x i .

Le nombre pseudo-aléatoire, u i , compris entre 0 et 1, est obtenu en divisant x i par m: u i := x i /m.

12121212 Les méthodes de Simulation

Janvier 2012

Exemple 1 :

On pose x 0 = 1 et

x

i

=

(5

x

i 1

+

5)mod 32

On obtient alors la suite suivante :

i = (5 x i − 1 + 5)mod 32 On obtient alors la suite suivante

13131313 Les méthodes de Simulation

Janvier 2012

La suite ci-dessus se répète après le 32 -ème élément.

La longueur du cycle est un indice de qualité de la suite générée et dépend du choix des paramètres a, b et m.

14141414 Les méthodes de Simulation

Janvier 2012

Exemple 2 :

Soit a = 2, b = 0, m = 7 et x 0 = 1.

La formule de récurrence

x

i

= 2

x

i 1

mod7

génère la suite :

x 1 = 2; x 2 = 4; x 3 = 1; x 4 = 2; x 5 = 4; x 6 = 1;

Divisons ces nombres par la longueur m = 7 de la suite. On obtient des nombres pseudo-aléatoires compris entre 0 et 1 :

u 1 = 2/7; u 2 = 4/7; u 3 = 1/7; u 4 = 2/7; u 5 = 4/7; u 6 =1/7;

15151515 Les méthodes de Simulation

Janvier 2012

La longueur d’un cycle est définie comme étant la quantité de nombres pseudo- aléatoires qui est générée avant d’obtenir la même séquence de nombres.

Remarquons que pour les choix de x 0 , a et m donnés ci-dessus la suite de nombres obtenue est composée de répétitions d’un cycle de longueur 3.

Il est évident que cette suite n’est pas très satisfaisante en termes probabilistes.

16161616 Les méthodes de Simulation

Janvier 2012

Le choix des paramètres a, b, m et x 0 est donc crucial, il peut conduire à des générateurs très mauvais ou au contraire très performants.

Si ces paramètres sont mal choisies, la séquence de nombres aléatoires va se reproduire à l'identique après seulement un petit nombre d'étapes, et les nombres ainsi générés feront apparaître une dépendance inadéquate.

Si ces paramètres sont bien choisies, la séquence se reproduit à l'identique un très grand nombre d'étapes.

17171717 Les méthodes de Simulation

Janvier 2012

De manière générale,

la valeur de m est souvent prise comme étant le plus grand nombre entier pouvant être représenté sur un ordinateur particulier.

Par exemple, sur un ordinateur 32 bits, m est souvent pris égal à 2 32 −1 où légèrement moins, et a est choisi très grand mais légèrement inférieur à m.

Avec ce choix, on devrait pouvoir générer plus de deux billions de nombres aléatoires avant qu'une séquence ne se répète (un billion correspond à 10 12 alors qu'un milliard correspond à 10 9 ).

18181818 Les méthodes de Simulation

Janvier 2012

4. Quelques générateurs fournis par les systèmes

Tout d’abord une mise en garde ; la plupart d’entre eux ont de très mauvaises propriétés statistiques. Si certains appartiennent au passé, d’autres sévissent toujours et avant de les utiliser il faut les tester et regarder leur source.

Le générateur RANDU de la Scientific Subroutine Package (SSP) d’IBM donne un exemple « historique » de générateur de petite période 2 29 ayant de très mauvaises propriétés statistiques : les triplets de tirages successifs n’appartiennent qu’ à 15 plans. La suite fournie par ce générateur est x i+1 = 65 539 x i (mod 2 31 ). Pour que sa période soit maximale (égale à 2 29 il faut que la racine soit un nombre premier.

19191919 Les méthodes de Simulation

Janvier 2012

La fonction Random en Pascal ISO, utilisée par le logiciel SAS fait appel au générateur x i+1 = 16 807 x i (mod 2 31 ). Le fait que m soit une puissance de 2 et que a = 16 807 = 5 7 soit tel que a (mod 8) = 7 {3, 5} entraîne que sa période est strictement inférieure à 2 29 , donc strictement inférieure à celle du précédent.

Le générateur rand écrit par les auteurs du système UNIX est x i+1 = 1 103 515 245 x i +12345 (mod 2 32 ) et a également un mauvais comportement statistique (signalé par le constructeur).

20202020 Les méthodes de Simulation

Janvier 2012

Comme tous les langages de programmation,ANSI C contient un générateur de nombres pseudo-aléatoires drand48 qui est le générateur « Minimal Standard »

x i+1 = 16 807 x i (mod 2 31 − 1) .

Pratiquement, si cette méthode de congruence est rapide et nécessite peu de calculs, ce générateur « n’est pas très bon » pour plusieurs raisons qui varient d’une machine à l’autre : la période m n’est pas assez grande et les termes successifs sont trop fortement corrélés. Même dans le cas où la période est de l’ordre de 2 32 , le nombre de plans contenant des triplets peut n’être que de l’ordre de 1600.

21212121 Les méthodes de Simulation

Janvier 2012

Plus récemment Matsumoto et Nishimura (1998) ont proposé un algorithme fondé sur un type particulier de registre à décalage à rétroaction. Ce générateur, baptisé « Mersenne twister » a des propriétés qui en font aujourd’hui l’un des générateurs de nombres pseudo-aléatoires les plus appréciés : les nombres à 32 bits sont distribués de manière uniforme sur 623 dimensions ; sa complexité en fait l’un des plus rapides et la longueur du cycle généré est de 2 19937 − 1.

Avec une telle longueur de cycle, si l’on avait eu la possibilité de faire tourner tous les ordinateurs de dernière génération depuis la naissance de l’univers (il y a 13.7 milliards d’années), ils ne seraient pas arrivés à compléter un seul cycle !

22222222 Les méthodes de Simulation

Janvier 2012

Caractéristiques de quelques générateurs :

Caractéristiques de quelques générateurs : 23232323 Les méthodes de Simulation Janvier 2012

23232323 Les méthodes de Simulation

Janvier 2012