Vous êtes sur la page 1sur 12

République Algérienne Démocratique et Populaire

Ministère de l’Enseignement Supérieur et de la Recherche Scientifique


Université M’hamed Bouguerra Boumerdes

Faculté des Sciences


Département des Mathématiques

Cours Master II ROOMS


Simulation

Réalisé par :

Mr CHEURFA F.

Année Universitaire 2021 − 2022


1. Génération de variables aléatoires

"Le hasard c’est "l’involontaire simulant le volontaire" ".

Introduction
L’élaboration d’un modèle mathématique adéquat nécessite une étude approfon-
die, pour fournir des résultats analytiques très précis sur l’évolution du système.
Malheureusement, une résolution mathématique complète reste souvent hors de
portée et les méthodes connues ne fournissent que dans des cas très simples une
caractérisation explicite de la distribution de probabilité dans le temps. A titre
d’exemple, un problème difficile à résoudre est la résolution d’un système d’équa-
tions différentielles. Sauf dans des cas très simples, nous nous sommes abstenus de
donner une méthode pour sa résolution et nous nous sommes limités à l’étude de la
distribution stationnaire. Or une étude de la transition de la distribution initiale
vers celle-ci apparaît souhaitable dans beaucoup de circonstances. Les méthodes
numériques peuvent fournir des approximations des solutions recherchées. Ces ap-
proches peuvent aboutir à un calcul approximatif des paramètres intéressants du
modèle. Toutefois elles souffrent de plusieurs difficultés intrinsèques. Les résultats
numériques sont difficiles à interpréter face au poids d’erreurs dont l’importance
est souvent méconnue. De plus, les calculs sont souvent complexes et il existe des

U.M.B.B ROOMS
2

modèles mathématiques pour lesquels les algorithmes mathématiques connus res-


tent inefficaces. Une autre approche calculatoire est la simulation. Cette technique
abandonne entièrement toute analyse mathématique et se limite à une "imitation"
du système étudié. Ce dispositif est appelé modèle de simulation. Dans d’innom-
brables circonstances un modèle de simulation est conceptuellement très simple et
peut fournir des informations quantitatives Il faut également noter que la technique
de simulation ne se limite pas à l’étude de systèmes d’attente mais s’applique aux
phénomènes inadaptés aux études analytiques, qu’il s’agisse de phénomènes déter-
ministes ou aléatoires. Néanmoins, la modélisation des systèmes d’attente fournit
un prototype d’application de la technique. La simulation souffre, à son tour, de plu-
sieurs inconvénients. En particulier, elle produit un volume important de résultats
qui nécessitent d’être résumés pour une interprétation. Ceux-ci, contrairement à des
propriétés déduites d’une étude analytique, qui sont d’une certaine façon universelle,
sont étroitement applicables au système modélisé. Ces résultats sont de nature
statistique et peuvent donc être interprétés de manière équivoque. En dépit de ces
inconvénients, la simulation reste un outil privilégié dans l’étude des comportements
des systèmes complexes et les prédictions qui en sont issues jouissent d’un haut
degré de confiance aussi bien chez les scientifiques que chez les industriels.

Exemple : simulation d’événements suivants


Dans un système à simuler, des événements arrivent dans le temps suivant un
mécanisme établi. L’idée fondamentale d’un modèle simulateur est de construire une
histoire détaillée des événements. Cette histoire est appelée liste d’événements. Une
analyse statistique est alors effectuée pour évaluer les paramètres du système.
Considérons un système d’attente à un seul serveur et supposons que les interar-
rivées soient des variables aléatoires indépendantes et uniformément distribuées
entre 1 et 5 mn. La durée de service est supposée être une v.a. uniformément dis-
tribuée entre 2 et 3 mn. Les usagers arrivant à des instants aléatoires, suivant
le processus indiqué, sont servis lorsque le serveur est libre puis, s’en vont. Un
observateur peut noter les temps d’arrivée, de début de service et de fin de service
pour chaque usager au cours d’une journée. On peut ensuite calculer la moyenne des
durées d’attente, la longueur moyenne de la file ainsi que d’autres paramètres du
système. Ces valeurs ne décriront certes que le jour d’observation mais elles seront
probablement une bonne estimation des comportements moyens pendant une longue
durée de temps.
Une simulation imite donc le comportement d’un système, réel ou hypothétique,
de sorte que les observations puissent se faire sans la réalisation physique du
système et sans perte de temps pour collecter les observations.

U.M.B.B ROOMS
1.1 Générateur de nombres pseudo-aléatoires 3

1.1 Générateur de nombres pseudo-aléatoires


Dans un code de calcul, un générateur de nombre aléatoire est une suite de
réels ( u 1 , ..., u m , ...) déterministes en double précision, compris entre 0 et 1. Selon
le langage de programmation et les librairies utilisées, l’appel au générateur passe
par la commande ’drand48” en C, random en C++ et Java, rand en Matlab, grand
en Scilab avec différents paramètres d’appel. Nous le noterons simplement rand
dans la suite. Au premier appel du générateur, on obtient la valeur u 1 , puis u 2 au
second appel. En effet, la graine (seed) du générateur c’est-à-dire l’indice du premier
nombre renvoyé est par défaut égale à 1.
Cela n’a rien de très aléatoire car la suite appelée ( u 1 , ..., u m , ...) est toujours la même,
c’est très pratique dans une première phase d’écriture un programme de simulation,
où générer des résultats vraiment aléatoires rend difficile la recherche de bug. Dans
un second temps, il est recommandé de changer la graine de manière aléatoire, en
l’initialisant par exemple sur l’horloge de la machine (a priori toujours différente).

Le générateur est qualifié d’aléatoire si la suite ( u 1 , ..., u m , ...) bien que détermi-
niste a tout d’un comportement aléatoire, similaire à une suite de variables aléatoires
indépendantes de loi uniforme, pour s’en assurer, il existe une multitude de tests
statistiques permettant de rejeter l’hypothèse d’indépendance ou l’adéquation à
une distribution donnée. En pratique, un générateur est cyclique et après appels, il
redonne la valeur initiale etc... Il est évidemment important de s’assurer que la pé-
riode L du générateur utilisé est suffisamment grande devant le nombre d’appels de
celui-ci : en pratique, l’essentiel des générateurs actuellement disponibles satisfont
cette contrainte. Exemple : Le générateur Mersenne Twister est un générateur plus
récent, robuste et rapide, avec une période égale 219936, très largement suffisante
pour bien des applications.

1.2 Générateurs des nombres pseudo-aléatoires


Les nombres machine compris entre 0 et 1 étant tous de la forme x = n2 p n ∈
{0, , 2P } il n’y a pas plus de 2 p nombres déférents sur [0; 1], et comme ces nombres
sont également espacés, le problème se réduit à tirer des entiers uniformément sur
{0, 1, 2, , 2P − 1}. Typiquement p = 32.
Les algorithmes de génération de suites (Un )n>0 uniformes auront toujours plus
ou moins la forme X n = f ( X n−1 ), X n ∈ {0, , m}. donc Un = X n / m;. Il y a donc deux
conséquences importantes :
– Les Un ne seront pas indépendantes : la suite est pseudo-aléatoire.
– La suite Un sera périodique de période au plus m, et parfois moins.

U.M.B.B ROOMS
1.2 Générateurs des nombres pseudo-aléatoires 4

1.2.1 Récurrences linéaires simple


Il s’agit de générateurs de la forme 1 :

X i = aX i−1 + c mod m. (1.1)

1.2.2 La méthode de Von Neumann


La méthode du carré médian (middle-Square method) a été décrite pour la
première fois vers 1240 dans un manuscript d’un frère franciscain connu sous le
nom de frère Edvin. Elle fut ensuite réinventée par John Von Neumann en 1946
qui l’utilisa pour l’ENIAC (avec 10 chiffres). Elle est très imparfaite (en autre
parce qu’elle converge toujours vers 0 ou bien qu’on retrouve très rapidement les
mêmes nombres) mais elle fourni tout de même un moyen simple de produire des
nombres pseudo-aléatoires. L’algorithme utilisé est trivial : Commencer par un
nombre aléatoire de n chiffres.
1. L’élever au carré afin d’obtenir un nombre de 2 ∗ n chiffres.
2. Ajouter des zéros à droite si nécessaire.
3. Extraire les n chiffres du milieu. Ce sera le prochain nombre aléatoire.
4. Recommencer
Exemple 1.2.1 en partant du nombre n = 2 chiffres
Etape1 Soit x = 89
Etape2 Elever x au carré x = 892 = 7921
Etape3 Extraire les 2 chiffres du milieu x = 7 92 1
Etape4 Le nombres pseudo-aléatoires U = 92
Etape5 On poser x=92 Aller à l’Etape 2

1.2.3 La méthode de Fibonacci


Cette méthode est basée sur la suite de Fibonacci modulo la valeur maximale
désirée. Elle demande peu de ressources et est très simple à implémenter. Toutefois,
sa qualité dépend fortement des nombres utilisés pour l’initialiser. On la formalise
ainsi :

xn = ( xn − 1 + xn − 2) mod M avec x0 et x1 deux valeures d’entrée. C’est à dire que


chaque terme de la suite est la somme des deux termes qui le précèdent, modulo un
nombre M. C’est donc une congruence additive.

Exemple 1.2.2 en partant x0 = 1, x1 = 2 et M = 10


Etape1 on calcul x3 = x1 + x2 mod M x3 = 3 mod 10 = 3 donc U1 = 3
Etape2 x4 = x3 + x2 mod M x4 = 5 mod 10 = 5donc U2 = 5

U.M.B.B ROOMS
1.3 Inversion de la fonction de répartition 5

Etape3 x5 = x4 + x3 mod M x5 = 8 mod 10 = 8 donc U3 = 8


Etape4 x6 = x5 + x4 mod M x6 = 13 mod 10 = 3 donc U4 = 3
Etape5 x7 = x6 + x5 mod M x7 = 13 mod 10 = 3 donc U5 = 3

1.2.4 Autre exemples de générateurs :


– Le générateur xn = (75 ∗ xn−1 ) mod (232 − 1) a été très utilisé dans les années
70 par IBM.
– Les générateurs xn = (48271 ∗ xn−1 ) mod (232 − 1) et xn = (69261 ∗ xn−1 ) mod
(232 − 1) ont été considérés par Fishman et Moore en 1986 comme les meilleurs.
– Unix utilise ce générateur : xn = (1103515245 ∗ xn−1 + 12345) mod (232)

1.3 Inversion de la fonction de répartition


1.3.1 Distribution continue
Une première approche repose sur la méthode dinversion de la fonction de
répartition, méthode proposée par Von Neumann en 1947. Dans toute la suite, U
désigne une variable aléatoire de loi uniforme sur [0,1].
Soit X une variable aléatoire de densité f connue. On cherche une méthode de
tirage de nombres aléatoires répartis selon la loi de X . Ces nombres forment un
échantillon de la loi de X . Soit F la fonction de répartition de la variable aléatoire X
vérifiant, Z x
F ( x) = P( X ≤ x) = f ( t)d t.
−∞

Théorème 1.3.1 (Théorème de la transformation inverse)


Soit X une variable aléatoire et F ( x) sa fonction de répartition. Si F ( x) est continue
et strictement croissante, alors Y = F ( X ) est une variable aléatoire de loi U (0,1) .
Dit autrement, si U est une variable aléatoire de loi U (0,1) , la variable F −1 (U ) est
une variable aléatoire dont F est sa fonction de répartition.

Démonstration. Par définition, nous avons

y = F ( x) = P( X ≤ x) = P(F ( X ) ≤ F ( x)) = P(Y ≤ y) = FY ( y),

ce qui prouve le théorème. ■

Une application directe de ce théorème permet, à partir d’une loi uniforme, de


générer n’importe quelle autre loi. Ainsi, pour générer un échantillon fictif issu
d’une variable aléatoire X , il faut connaître F ( x) et avoir une suite de nombres u 1 ,
u 2 , . . ., u n issus d’une variable U de loi U (0,1) . L’égalité x = F −1 ( u) permet d’obtenir
l’échantillon
x1 = F −1 ( u 1 ), x2 = F −1 ( u 2 ), . . . , xn = F −1 ( u n ),

U.M.B.B ROOMS
1.3 Inversion de la fonction de répartition 6

issu d’une population distribuée selon F . La figure 1.1 illustre la méthode de la


transformation inverse donnée par l’algorithme suivant.

Algorithme (Transformation inverse pour une distribution continue)


Générer u ∼ U(0,1) ;
x = F −1 (u);
R envo yer ( x);
 

 
 

Figure 1.1 – Méthode de la transformée inverse

La seule difficulté est celle de calculer F −1 en connaissant F . Dans certains cas


cela n’est pas possible de manière explicite, et dans ces cas d’autres techniques, que
l’on verra plus loin, permettent de simuler un échantillon de X .
La génération de variables aléatoires uniformes est donc un déterminant clé dans
le comportement des méthodes de simulation pour d’autres distributions de proba-
bilités, car ces distributions peuvent être représentées comme une transformation
déterministe de variables aléatoires uniformes. Notons également que le Théorème
1.3.1 implique qu’un mauvais choix d’un générateur de nombres aléatoires uniformes
peut invalider la procédure de simulation.

Exemple 1.3.2 (Loi exponentielle - E xp(λ))


La densité de probabilité de la distribution exponentielle de paramètre λ > 0 prend
la forme
λ e−λ x si x Ê 0
(
f ( x) =
0 si x < 0

U.M.B.B ROOMS
1.3 Inversion de la fonction de répartition 7

La fonction de répartition est donnée par :

1 − e−λ x si x Ê 0
(
F ( x) =
0 si x < 0

Pour appliquer le théorème de la transformation inverse, nous devons chercher


la fonction inverse de u = 1 − e−λ x . Cela donne x = − log(1 − u)/λ. Remarquons que
si U est une variable aléatoire uniforme, (1 − U ) est aussi une variable aléatoire
uniforme. Donc, si U est une variable aléatoire uniforme, alors

X = −(log U )/λ

est une variable aléatoire de loi exponentielle (de moyenne 1/λ).

Algorithme (Exemple 1.3.2)


Générer u ∼ U(0,1) ;
x=-(log u)/λ;
Renvoyer(x);

Exemple 1.3.3 (Loi uniforme continue sur [a, b] - U (a,b) )


La densité de probabilité de la loi uniforme continue est une fonction porte sur
l’intervalle [a, b], notée U (a,b) :

1

b−a pour a ≤ x ≤ b,
f ( x) =
0 sinon.

La fonction de répartition est donnée par :






 0 pour x < a
x−a
F ( x) = pour a ≤ x < b


 b − a
1 pour x ≥ b

x−a
Soit u ∼ U (0,1) , nous devons chercher la fonction inverse de u = . Cela donne
b−a
x = ( b − a) u + a.

Algorithme (Exemple 1.3.3)


Générer u ∼ U(0,1) ;
x = (b-a)u+a;
Renvoyer(x);

U.M.B.B ROOMS
1.4 Méthode du rejet et acceptation 8

Exemple 1.3.4 (Distribution normale - N (0, 1))


Bien que, la fonction de répartition φ de la loi normale ne peut pas être exprimée
explicitement, étant donné que

1
Z x
φ( x ) = p exp{− z2 /2}d z,
2π −∞

il existe des approximations de φ et de φ−1 jusqu’à une précision arbitraire. Par


exemple, Abramowitz et Stegun (1964) donnent l’approximation suivante

φ( x) ' 1 − ϕ( x)[ b 1 t + b 2 t2 + b 3 t3 + b 4 t4 + b 5 t5 ] ( x > 0),

où ϕ désigne la densité normale, t = (1 + px)−1 et

p = 0.2316419, b1 = 0.31938, b2 = −0.35656,


b3 = 1.78148, b4 = −1.82125, b5 = 1.33027.

De même, nous avons également l’approximation


a0 + a1 t
φ−1 (α) ' t − ,
1 + b 1 t + b 2 t2

où t2 = log(α−2 ) et

a0 = 2.30753, a1 = 0.27061, b1 = 0.99229, b2 = 0.04481.

Ces deux approximations sont exactes jusqu’à une erreur d’ordre 10−8 , l’erreur
étant absolue. Si aucune autre méthode de simulation rapide n’était disponible,
cette approximation pourrait être utilisée dans la pratique. Cependant, comme
nous le verrons plus tard, il existe un algorithme exact et beaucoup plus rapide
(Algorithme de Box et Muller).

1.4 Méthode du rejet et acceptation


Il y en a plusieurs versions. La plus simple consiste à donner une méthode pour
simuler des points suivant une distribution uniforme sur un borélien de R 2 de
mesure finie.

1.5 Méthode de Rejet-Acceptation


Il existe beaucoup de distributions pour lesquelles ni la méthode de transfor-
mation inverse, ni des transformations plus générales ne peuvent produire des
variables aléatoires de ces distributions. Pour ces cas, nous devons nous tourner
vers des méthodes indirectes, c’est-à-dire vers des méthodes pour lesquelles nous

U.M.B.B ROOMS
1.5 Méthode de Rejet-Acceptation 9

générons tout d’abord une variable aléatoire candidate qui est alors soumise à un
test. L’acceptation de ce test conduit à conserver la valeur simulée, son rejet à répéter
la simulation. Comme nous allons le voir à présent, cette classe de méthodes est
extrêmement puissante et nous autorisera à simuler virtuellement suivant n’importe
quelle distribution.
La méthode de Rejet-Acceptation est une méthode indirecte due à Stan Ulam et
John von Neumann. Elle peut être appliquée lorsque les méthodes directes mention-
nées ci-dessus échouent ou s’avèrent inefficaces sur le plan des calculs.

1.5.1 Méthode de Rejet-Acceptation, pour les densités à support compact


Cette méthode de simulation d’échantillons s’applique aux variables aléatoires
continues X non nulles sur un intervalle de R. Pour introduire l’idée, supposons
que la fonction de densité de probabilité cible f (à partir de laquelle nous voulons
échantillonner) est délimitée sur un intervalle fini [a, b] (compact) et est nul en
dehors de cet intervalle (Figure 1.2).
Soit,
c = sup { f ( x) : x ∈ [a, b]} .

𝑐𝑐

𝑓𝑓(𝑥𝑥)

𝑥𝑥
𝑎𝑎 𝑏𝑏

Figure 1.2 – Méthode de Rejet-Acceptation

Dans ce cas, il est possible de représenter la surface entre le graphe de la densité


et l’axe des x à l’intérieur d’un rectangle, de choisir au hasard un point dans ce
rectangle et de déterminer s’il est situé au-dessus ou au-dessous (Figure 1.3) de la
courbe f ( x).
Considérons le rectangle R = [a, b] × [0, c] et tirons un point ( x, y) de manière
uniforme dans le rectangle R . Cela peut se faire de la manière suivante, On tire
un nombre x uniformément réparti entre a et b (i.e. x ∼ U (a,b) ), ensuite un nombre
y uniformément réparti entre 0 et c (i.e. y ∼ U (0,c) ). Les points situés au-dessous
de f ( x) sont acceptés (Figure 1.3−(a)) et ceux situés au-dessus de f ( x) sont rejetés
(Figure 1.3−(b)).

U.M.B.B ROOMS
1.5 Méthode de Rejet-Acceptation 10

(𝑥𝑥, 𝑦𝑦)
𝑦𝑦 ×
𝑓𝑓(𝑥𝑥) 𝑓𝑓(𝑥𝑥)
𝑦𝑦 × (𝑥𝑥, 𝑦𝑦)

𝑥𝑥 𝑥𝑥
(𝑎𝑎) (𝑏𝑏)

Figure 1.3 – (a) ( x, y) situé au-dessous de f ( x),(b) ( x, y) situé au-dessus de f ( x).

Ceci se traduit mathématiquement par le test suivant, si y ≤ f ( x) on conserve x qui


est une réalisation de X et on pose X = x sinon on rejette x et on recommence. Dans
ce cas, générer une variable aléatoire X est simple, et cela peut être fait en utilisant
les étapes de Rejet-Acceptation suivantes :

1. Générer x ∼ U(a,b) ;
2. Générer y ∼ U(0,c) ; % indépendamment de x
3. Si y ≤ f(x) Alors
Renvoyer(x);
Sinon
Aller à l’étape 1;
Finsi

Lorsqu’on fait des simulations, on utilise souvent des générateurs de nombres


aléatoires qui obéissent à une loi uniforme sur [0, 1], et nous avons déja montrer
(exemple 1.3.3) comment combiner un tel générateur avec une transformation af-
fine pour générer des nombres aléatoires qui obéissent à une loi uniforme sur un
intervalle [a, b].

Algorithme (Rejet-Acceptation, en deux façon)


Générer u1 , u2 ∼ U(0,1) ; Répéter
x=(b-a)u1 +a; y=cu2 ; Générer u1 , u2 ∼ U(0,1) ;
Tant que y > f(x) Faire x=(b-a)u1 +a; y=cu2 ;
Générer u1 , u2 ∼ U(0,1) ; Jusqu’à y ≤ f(x)
x=(b-a)u1 +a; y=cu2 ; Renvoyer(x);
Fin tant que
Renvoyer(x);

La probabilité qu’un point arbitraire ( x, y) ∈ R soit accepté (c’est-à-dire il appar-


tient a la région d’acceptation) est donnée par le rapport de l’aire comprise sous la

U.M.B.B ROOMS
1.5 Méthode de Rejet-Acceptation 11

courbe et de l’aire du rectangle,


Rb
a f ( x) 1
P(( x, y) est accepté) = = ,
aire du rectangle c ( b − a)

On voit que pour a et b fixés, plus c est petit plus le nombre de points rejetés sera
petit. L’algorithme est donc d’autant plus performant que c est petit.

Exemple 1.5.1 Soit f ( x) = 2 x, 0 ≤ x ≤ 1. Nous avons

c = sup {2 x : x ∈ [0, 1]} = 2,

Algorithme (Exemple 1.5.1, en deux façon)


Générer x, y ∼ U(0,1) ; Répéter
Tant que (y > x) Faire Générer x, y ∼ U(0,1) ;
Générer x, y ∼ U(0,1) ; Jusqu’à (y ≤ x)
Fin tant que Renvoyer(x);
Renvoyer(x);

U.M.B.B ROOMS

Vous aimerez peut-être aussi