Vous êtes sur la page 1sur 24

Introduction Simulation de variables pseudo-aléatoires uniformes

Cours 2 : Simulation de variables aléatoires

A. Righi

1ème année MASTER PA et SA


Département de probabilité Statistiques. Faculté des sciences exactes.

Année Universitaire 2022-2023

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Plan

1 Introduction

2 Simulation de variables pseudo-aléatoires uniformes

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Simulation de variables
pseudo-aléatoires uniformes

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Simulation des nombres pseudo aléatoires


"Anyone who considers arithmetical methods of producing
random numbers is, of course, in a state of sin. J. von Neumann

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Simuler la loi uniforme permet de simuler les autres


lois

Les méthodes de simulation de phénomènes aléatoires reposent


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 à produire une séquence de variables aléatoires
uniformes et indépendantes.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Simuler la loi uniforme permet de simuler les autres


lois

En pratique, la production par des moyens informatiques d’une


suite de variables uniformes iid est impossible : toute suite de
nombres résulte de la mise en oeuvre d’un algorithme, et par
conséquent est déterministe. 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.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

Simulation des nombres pseudo aléatoires

Générer ou produire des "vraies" variables aléatoires (uniformes)


issues de phénomènes physique aléatoires avait montré ses limites.
Von Neumann et autres ont développé l’idée d’utiliser les
ordinateurs(donc algorithmes déterministes) pour produire des
nombres aléatoires.
Objectif :Générer des nombres pseudo-aléatoires uniformément
distribuées U[0, 1].

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

La fonction rand du langage C

Vous avez très probablement déjà utilisé le générateur par défaut


de votre langage de programmation ou logiciel favori. En langage
C, la fonction rand de la bibliothèque standard est supposée
produire à chaque appel un nombre entier aléatoire uniformément
distribué entre 0 et la constante prédéfinie RAND_MAX (égale par
exemple à 231 − 1 dans certaines versions d’UNIX). Voici à quoi
ressemble rand du C :

int rand() /* Produces a random number between 0 and 32767.*/


{ rand_seed = rand_seed * 1103515245 +12345;
return (unsigned int)(rand_seed / 65536) % 32768;}

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Chaque appel à rand consiste donc à faire évoluer une variable


globale rand_seed au moyen d’une relation de récurrence affine, et
à renvoyer à l’utilisateur une certaine fonction de cette variable.
Pour obtenir des nombres réels entre 0 et 1 ,il suffit de diviser le
nombre obtenu par RAND_MAX.
On note que, dans le code ci-dessus, le seul élément
possiblement aléatoire dans l’affaire est l’initialisation de la variable
rand_seed, la suite des valeurs produites par les appels successifs à
cette fonction étant alors entièrement déterminée. Pour éviter cela,
l’initialisation est dérivée de la valeur de l’horloge interne.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Méthodes de congruence

La méthode de congruence simple est définie par la relation de


récurrence suivante :
Congruence simple
xi = (axi−1 + b) mod m
pour i = 1, 2, · · · et a, b, m et x0 des entiers positifs données.
On dit que a est le multiplicateur, b est l’incrément, m le modulus
et x0 la valeur initiale ou seed.

Le nombre pseudo-aléatoire entre 0 et 1 est obtenu par


ui = xi /m

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Théorème

Soit k ∈ {0, 1, · · · , m − 1}. Soit a, b , m tels que :


1 b et m sont premiers entre eux.
2 (a − 1) un multiple de chaque nombre premier qui divise m.
3 si m est un multiple de 4 alors (a − 1) l’est aussi.
En particulier pour m = 2k , a = 4c + 1 et b un nombre impair la
suite de nombres pseudo-aléatoires est cyclique de longueur m ; k
et c étant des entiers positifs.
Alors la suite définie par la récurrence
(
x0 = k
xi = (axi−1 + b) mod m

a un cycle de longueur m (c’est le maximum possible). beamer-tu-log


Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Minimal Standard

La période n’est pas le seule qualité demandée aux générateur.


On demande que la suite générée se comporte le plus possible
comme une suite de variables uniformes.
1 Pour m suffisamment grand les xi /m sont distribués
approximativement selon la loi uniforme sur [0, 1].
2 Pour une qualité de la suite générée satisfaisante, il est
recommandé de choisir m > 230 .
3 Le choix a = 75 , m = 231 − 1, b = 0, proposé par
Park et Miller en 1988 est connu sous le nom de
minimal standard, pour quelques milliers des nombres
aléatoires, ce générateur produit des bonnes suites des
nombres pseudo-aléatoires.
beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Congruence simple : m = 32

30




25





20






15






10







5




0

0 5 10 15 20 25 30

Figure – Les points (xi , xi+1 ) pour i = 0, · · · , 31 où x0 = 1et


xi = 9xi−1 + 3 mod 32 beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Congruence simple m = 256

250
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●

200
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
150

● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
100

● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●

50

● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●
● ●

0

0 50 100 150 200 250

Figure – Les 256 points (xi , xi+1 ) pour i = 0, · · · , 255, où x0 = 1 et


xi = 9xi−1 + 3 mod 256 beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Défaut de la congruence simple : Indépendance

Dans la figure précédente les 256 paires construites à l’aide du


générateur donné par m = 256, x0 = 1, c = 2, b = 3 sont répartis
sur 9 segments de droites. Ce constant surprenant s’explique par le
fait que la relation de récurrence

xi+1 = (axi + b) mod m

peut s’écrire

xi+1 = axi + (b − dm)


où d ∈ (0, 1, 2, · · · , a − 1). définit l’équation de a droites .
beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Congruence avec retard

Congruence avec retard


Une modification de la règle de récurrence est donnée par :

xi = (axi−r + b) mod m

où r indique le retard et où les premiers termes sont calculés avec


la relation
xi = (a0 xi−1 + b) mod m0 , les paramètres a0 , b0 m0 pouvant être
différents de a, b et m.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

250
200
150
100
50
0

0 50 100 150 200 250

Figure – Les points (xi , xi+1 ), dans un exemple de congruence avec


retard.
beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Autres méthodes
Congruence avec mélange.
Méthode de l’inverse avec Congruence.
Méthode de registre à décalage avec rétroaction linéaire.

Dans la bibliothèque du logiciel R, on dispose d’un excellent


générateur de variables pseudo-aléatoires. Il a été validé par
multitudes de tests statistiques. L’instruction est runif(n,a,b).

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Intérêt des sources algorithmiques

Les procédés algorithmiques de génération de nombres


pseudo-aléatoires, dont nous venons de décrire quelques exemples,
sont intéressants à plusieurs titres.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

la répétabilité

Une fois la graine choisie par l’utilisateur (et stockée), il est


possible de reproduire intégralement la séquence des nombres
pseudo-aléatoires produits, ce qui peut être important, par exemple
pour vérifier des résultats obtenus par simulation, ou débugger des
codes de simulation ;

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

la facilité d’utilisation

Dans la plupart des implémentations, la génération est rapide et


sans limitation réelle quant à la quantité d’appels au générateur
que l’on peut effectuer ;

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

la standardisation

Le fait d’employer une procédure standardisée permet de disposer


d’informations fiables sur la qualité et les performances des
procédures que utilisées, en provenance de divers chercheurs et
utilisateurs, sous la forme de publications scientifique et de
documentation variée.

beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Sources physiques
Une idée qui peut sembler naturelle pour obtenir des suites de
nombres aléatoires, consiste à choisir des valeurs issues d’un
phénomène physique considéré comme aléatoire (lancer d’une pièce
de monnaie, roulette, brassage de billes de loto, ou encore
désintégration de particules radioactives, bruit de grenaille de
composants électroniques,...)
Selon l’interprétation classique de la théorie quantique, les meilleurs
générateurs aléatoires (c’est-à-dire ceux qui produiraient de vrais
nombres aléatoires), seraient ceux qui utilisent les phénomènes
quantiques. Par exemple, le choix d’un photon de traverser ou non
une lame semi-réfléchissante constitue un tel générateur.
Notons que dans la cryptographie, où on a recours à la génération
de (clés) nombres aléatoire, c’est l’imprévisibilité qui est essentielle,
donc on a intérêt à utiliser des sources physiques.
beamer-tu-log
Introduction Simulation de variables pseudo-aléatoires uniformes

La fonction rand du langage C :

Tests et qualité des générateurs

La meilleure manière de parer à l’éventualité qu’un générateur ait


un défaut de quelconque nature est de le soumettre à une
batterie de tests avant d’être utilisé.

beamer-tu-log

Vous aimerez peut-être aussi