Chapitre XI Chapitre XI Génération de valeurs pseudo- aléatoires Knuth, " The Art of Computer Programming ", Vol. 2, Chap. 3 : ndom Numbers", pp. 1-177, 1981. M. Law & W. D. Kelton, " Simulation Modeling & Analysis", raw-Hill, 1991. (Chap. 7-8). V. Hoover, R. F. Perry, " Simulation A problem-Solving Approa ison-Wesley, 1989. (Chap. 7).
49
Embed
Chapitre XI Génération de valeurs pseudo-aléatoires D. Knuth, " The Art of Computer Programming ", Vol. 2, Chap. 3 : "Random Numbers", pp. 1-177, 1981.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Chapitre XIChapitre XI
Génération de valeurs pseudo-aléatoiresD. Knuth, " The Art of Computer Programming ", Vol. 2, Chap. 3 :"Random Numbers", pp. 1-177, 1981.
A. M. Law & W. D. Kelton, " Simulation Modeling & Analysis", McGraw-Hill, 1991. (Chap. 7-8).
S. V. Hoover, R. F. Perry, " Simulation A problem-Solving Approach ",Addison-Wesley, 1989. (Chap. 7).
Chapitre XI - Génération de valeurs pseudo-aléatoires
2
Pourquoi générer des Pourquoi générer des nombres « au hasard »?nombres « au hasard »?
- Théorie de l'échantillonnage
- Analyse numérique (approche de Monte-Carlo)
- Algorithmes probabilistes (Sherwood, Las Vegas, Monte Carlo, etc.)
- Théorie des jeux (jeux sur ordinateur, didacticiels)
- Simulation
- etc.
Chapitre XI - Génération de valeurs pseudo-aléatoires
3
Qu’est-ce qu’un nombre Qu’est-ce qu’un nombre « au hasard »?« au hasard »?
- 1415913 est-il plus " aléatoire " que 999999 ?- Les expressions "nombre au hasard " et " nombre aléatoire " sont des abus de langage.- On doit plutôt chercher en réalité un mécanisme permettant de générer une séquence de nombres qui paraissent avoir un comportement aléatoire, même si une séquence déterministe est produite.Définition : Nombre aléatoire une v.a. dans [0,1] tel que
fX (x) = 1 si x [0, 1]0 sinon
Note : X ~ U [0,1] (B-A) X + A ~ U[A,B] .
- C'est impossible de générer des variées aléatoires continus car l'ensemble desvaleurs possibles générées par un ordinateur est fini.
- Mais si cet ensemble est grand, on peut approximer l'ensemble continu.
Chapitre XI - Génération de valeurs pseudo-aléatoires
- Idéalement, ces propriétés devraient être satisfaites kMAISUn générateur sera considéré comme satisfaisant s'il satisfait ces conditionspour k = 1, 2, ..., N, où N est assez grand.
- S'il y a des cycles dans la séquence des Ui, ils doivent être de période tellementlongue qu'on ne puisse pas l'atteindre en pratique.
Comment vérifier ces propriétés ?- Tests théoriques (analyse des générateurs à partir des paramètres numériques
sans générer les Ui).- Tests statistiques (tests basés sur les Ui générés).Autres points à considérer- Efficacité du générateur (vitesse de calculs).- Espace mémoire exigé - Caractère reproductible.
- Les points (Ui , Ui+1, ..., Ui+k-1) devraient être répartis à peu près uniformémentdans l'hypercube à k dimensions (0,1)k.
Chapitre XI - Génération de valeurs pseudo-aléatoires
6
Principales classes de méthodes de Principales classes de méthodes de génération de nombres aléatoiresgénération de nombres aléatoires
1°) Mécanismes physiques
- pile ou face, boules dans une urne, …- on jumelle à l'ordinateur un dispositif capable d'enregistrer les résultats d'un
- En pratique, on essaie de choisir m le plus grand possible.
- Souvent, on prend m = 2b où b est le nombre de bits utilisés pour représenterun entier positif dans la machine.
- L'opération modulo devient alors très facile : il suffit de laisser tomber les bitsqui dépassent à gauche. 0b b-1
Chapitre XI - Génération de valeurs pseudo-aléatoires
18
Exemples (suite)Exemples (suite)
- Exemples :
si : = (69069 si-1 + 1) MOD 232 (VAX)
si : = (314159269 si-1 + 453806245) MOD 231
- Pour avoir p = m, il suffit alors de prendre c impair et a -1 multiple de 4.
- Attention :une longue période est une condition nécessaire, mais pas suffisantepour un bon générateur.
Chapitre XI - Génération de valeurs pseudo-aléatoires
19
Principaux types de générateursPrincipaux types de générateurs4. GCL multiplicatifs(GCLM): c=04. GCL multiplicatifs(GCLM): c=0
- Les GCLM sont les plus utilisés en pratique.
Avantage : pas d'addition à effectuer.
- Période maximale : p = m-1 (s = 0 est exclus).- Théorème :
Un GCLM (c= 0) est de période maximale (p = m-1) si (conditions suffisantes):
(a) m est premier et(b) m-1 est le plus petit entier k tel que (ak -1) MOD m = 0.
- Exemples :
si : = 16807 si-1 MOD (231 -1) IBM, APL, IMSL, SIMPascal, ...)
si : = 630360016 si-1 MOD (231 -1) (SIMSCRIPT II.5, ... )
Heureux hasard : 231-1 = 2147483647 est premier !
Chapitre XI - Génération de valeurs pseudo-aléatoires
20
Principaux types de générateursPrincipaux types de générateurs4. GCL multiplicatifs(GCLM): c=04. GCL multiplicatifs(GCLM): c=0
- THÉORÈME : Si c = 0 et m = 2b, alors p m/4.
- Exemple : si : = 65539 si-1 MOD 231
Ce générateur, appelé RANDU, fut longtemps utilisé sur les systèmes IBM.Il l'est encore à certains endroits. Il est malheureusement très très mauvais.
- Il est recommandé, pour un GCLM, de choisir m premier.
On choisit habituellement le plus grand nombre premier représentable sur la machine. On aura évidemment a < m et s < m.
Mais lors du calcul de f(s), le produit as dépasse en général le plus grand entier représentable sur la machine. Même en double précision, ça peut parfois déborder.
Que faire ? Il faut implanter la multiplication en " logiciel ". On essaie en général d'obtenir une implantation portable dans un langage de haut niveau.
- Si le modulo m est une puissance de 2, on ne peut pas atteindre la période "maximale".
Chapitre XI - Génération de valeurs pseudo-aléatoires
21
Tests statistiques sur les générateursTests statistiques sur les générateurs
- Il s'agit d'utiliser des tests d'hypothèse afin de tester Ho : Notre générateur est bon.
Il s'agit de tester si les Ui ont vraiment l'air d'être des v.a. i.i.d. U[0,1].
- N'utilisez jamais un générateur à des fins sérieuses à moins de le tester vous-même, ou de savoir que c'est l'un des bons générateurs testés et suggérés dansla littérature.
- Les générateurs fournis sur les systèmes sont souvent très mauvais.
Chapitre XI - Génération de valeurs pseudo-aléatoires
22
A) Indicateur de la valeur du générateurA) Indicateur de la valeur du générateur
X U[0,1] E[X] = 0.5, Var(X) = 1 /12 et E[X1 X2] = E[X1] = 0.25
où X1 et X2 sont indépendantes.
Lorsqu'un grand échantillon de nombres aléatoires a été généré, des estimés précis de lamoyenne, la variance, le facteur d'auto-corrélation de la population peuvent être obtenuset comparés aux valeurs théoriques.
Exemple [Hoover, Perry, 1989] :
si = [25173 si-1 + 13849] mod 65536 et so = 23311
10,000 nombres ont été générés.
On a obtenu X = 0.5019 et 1 / 10000 i=1, 2, … 9999 xi xi+1 = 0.25
s2 = 0.08412
Chapitre XI - Génération de valeurs pseudo-aléatoires
23
B) Tests d’indépendance entre les B) Tests d’indépendance entre les éléments généréséléments générés
1o) Test basé sur un coefficient de corrélation
Soit C = n i=1, 2, … n-1 xi xi+1 - [i=1, 2, … n xi ]2
n i=1, 2, … n xi2 - [i=1, 2, … n xi ]2
on peut montrer qu'en présence d'une population normale, où les {xi} sont indépendants,
E [C]= - 1 / (n - 1) et 2C = {n(n - 3) / (n+1)}1/2 / (n-1)
[Knuth, 69, Vol. 2] Pour des nombres aléatoires uniformes, cette approximation estbonne lorsque n est élevé.
Exemple précédent :
C = -0.002741 ce qui donne Z = [C-E [C] ] / C = -0.274
Si Z (0,1), Prob (|Z| 1.96) = 0.95- 0.274 n'est pas significatif.
Chapitre XI - Génération de valeurs pseudo-aléatoires
24
B) Tests d’indépendance entre les B) Tests d’indépendance entre les éléments généréséléments générés
2o) Tests des séquences croissantes (Run Test)Ce test est basé sur le nombre de séquences croissantes et décroissantes.
Soit R = le nombre de séquences dans l'échantillon,
E [R] = (2n-1) / 3 et Var(R) = (16n - 29) / 90
et pour n élevé (grand échantillon), R est approximativement normale.
Chapitre XI - Génération de valeurs pseudo-aléatoires
26
B) Tests d’indépendance entre les B) Tests d’indépendance entre les éléments généréséléments générés
- Il s'agit de calculer
R = i=1, 2, … 6 j=1, 2, … 6 aij (ri - nbi) (rj - nbj) / n
Le calcul des constantes aij et bi est effectué dans Knuth, 1981, pp.65-68, Vol. 2.
- Pour une valeur de n élevée, ( 4000)
R 2 (6) avec 6 degrés de liberté;
sous Ho : les Ui sont des v.a. I.I.D.
Chapitre XI - Génération de valeurs pseudo-aléatoires
27
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
D+ = max {i / n - F*(Ui)}1 i n
D - = max {F*(Ui) - (i-1) / n}1 i n
Il n'est pas suffisant de rechercher un générateur de période maximale.
Habituellement, on ne génère pas une séquence complète sans cycle dont la longueurest égale à celle de la période.Il est important de vérifier que l'échantillon U1, U2, ..., Un est réparti uniformémentdans l'intervalle [0,1].
1o) Test de Kolmogorov-Smirnov.
Pour tester si les Ui suivent une loi U[0,1], on tire un échantillon U1, U2, ... Un et oncompare la fonction de répartition empirique avec celle d'une U[0,1].Le test statistique est : D = max {D+, D -} où
Chapitre XI - Génération de valeurs pseudo-aléatoires
28
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
Lorsque n est élevé, nous avons des approximations des valeurs critiques :
D.05 = 1.36 / n et D.01 = 1.63 / n .
Exemple précédent :
n = 10,000 et D = 0.007612
D.05,n = 10,000 = 0.0136
Test non significatif : on ne peut pas conclure que le générateur necorrespond pas à celui d'une distribution uniforme.
Chapitre XI - Génération de valeurs pseudo-aléatoires
29
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
2o) Test du Khi-deux
Test du Khi-deux à 1 dimension
- On divise l'intervalle [0,1] en k sous-intervalles égaux.
- On s'attend à obtenir n/k observations de Ui dans chaque sous-intervalle.
- Le test statistique est :
(k / n) j=1, 2, … k (fj - n / k)2 où fj = # observations dans le jième intervalle.
Cela suit approximativement une loi k-12 degrés de liberté sous
l'hypothèse
d'une répartition uniforme.- On rejette Ho si k-1
2 prend une valeur trop grande.
Chapitre XI - Génération de valeurs pseudo-aléatoires
30
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
Test du Khi-deux à d dimensions
On divise [0,1] en k sous-intervalles égaux, ce qui divise l'hypercube [0,1]d en kd sous-hypercubes égaux.
Exemple : d= 2, k = 5
.
. ..
. .
.
. ..
. .
.
. ... .
.
. ..
. ....
.
. ...
.
. .
.
.
.
. ..
.
.. .
. ..
..
. ..
.
.
. ..
. .
.
. ..
. .
.
. ..
. .
.
. ... ..
.
. .. .
..
.
..
.
.
.
. ..
.
.. .
. ..
..
. ..
.
Chapitre XI - Génération de valeurs pseudo-aléatoires
31
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniformeOn regroupe les Ui en d-tuples :
(U1, ..., Ud), (Ud+1, ... , U2d), ...
On compte le nombre de d-tuples observés dans chaque sous-hypercube (j1, j2, ..., jd),
soit fj1, j2
, ..., jd
On calcule (kd / n) j1=1, 2, … k … jd =1, 2, … k (fj1, j2
, ..., jd - n / kd)2.
Cela suit approximativement une loi kd-12 sous Ho.
On rejette Ho si kd-12 est trop grand.
Si kd-1 est très grand, on peut approximer par une loi normale.
Ce test permet de tester si les d-tuples sont répartis uniformément dans [0,1]d.
Toutefois , la puissance de ce test est faible.
Chapitre XI - Génération de valeurs pseudo-aléatoires
32
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
Tests répétitifs
Pour chacun des tests ci-haut, on peut répéter le test plusieurs fois, sur des sectionsdifférentes de la séquence {Ui}.
On obtient ainsi une série de valeurs; on peut tester si celles-ci sont réparties selon laloi à laquelle on s'attend sous Ho, en utilisant par exemple un test deKolmogorov-Smirnov.
Chapitre XI - Génération de valeurs pseudo-aléatoires
33
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
Calculer la fonction de répartition empirique de ces 100 valeurs de R,Comparer cette fonction de répartition empirique avec celle d'une loi à l'aide dutest de Kolmogorov-Smirnov.On obtient ainsi un test beaucoup plus puissant mais plus coûteux.
Chapitre XI - Génération de valeurs pseudo-aléatoires
34
C) Test pour vérifier l’adéquationC) Test pour vérifier l’adéquationentre l’échantillon généré etentre l’échantillon généré et
une population uniformeune population uniforme
Conclusion :
- Il reste beaucoup de recherche à faire dans ce domaine.
- Plusieurs autres tests statistiques n'ont pas été présentés.
- Les tests théoriques ne sont pas présentés à cause de la complexitémathématique.
[Knuth, 81, pp. 75-110; Fishman, 78, pp. 358-371].
Chapitre XI - Génération de valeurs pseudo-aléatoires
35
Génération de valeurs pseudo-aléatoires Génération de valeurs pseudo-aléatoires selon une loi selon une loi U[0,1] U[0,1]
On utilise en général des valeurs produites par un générateur U[0,1] que l'on transforme.
Comment choisir un algorithme de transformation ?
On cherche une méthode:
exacte : les résultats sont justes.
efficace : a) mémoire requise
b) temps d'exécution
complexité de l'algorithme (difficulté d'implantation et de compréhension).
robustesse de l'algorithme (exact et efficace quel que soit les valeurs des paramètres).
Chapitre XI - Génération de valeurs pseudo-aléatoires
36
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
On veut générer la valeur d'une v.a. X dont la fonction de répartition est F.
Soit U : U[0,1] , si F est inversible (F-1 existe) alors
P (F-1(U) x) = P (U F(x)) = F(x) = P(X x).
F-1 (U) a la même distribution que X.
F (X) U[0,1].
On procède alors comme suit :
1. générer U : U [0,1]
2. poser X = F-1 (U)
x
1.0
X = F-1(U)
U
Chapitre XI - Génération de valeurs pseudo-aléatoires
37
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
Exemple I
Soit fX(x) = 2x 0 x 1
0 sinon
FX(x)= 0 x 0 x2 0 x 1 1 x 1
x = F-1(u) = u
Chapitre XI - Génération de valeurs pseudo-aléatoires
38
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
Exemple II
Soit X ~ Exp (),
F(X) = 1 - e-x, x > 0
u = 1 - e -x x = - ln (1- u) /
Générer U et calculer X = -ln (1-U) * Moyenne.
Chapitre XI - Génération de valeurs pseudo-aléatoires
39
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
Exemple III
Soit X ~ Weibull (
F (x) = 1 - e-(x/), x > 0
F -1(u) = [-ln (1- u)]1/
Chapitre XI - Génération de valeurs pseudo-aléatoires
40
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
Exemple IV (cas discret)Valeurs possibles : x1 < x2 < x3 < … et F(x) = P (X x) = ∑ p(xi)
{i| xi x}
1o) Générer U : U[0,1]
2o) Poser X := xI où I est le plus petit entier tel que F(xI) U.
x
1.0
U
xI
x1 x2 x3
Chapitre XI - Génération de valeurs pseudo-aléatoires
41
Principales classes de méthodesPrincipales classes de méthodesA) Transformation inverseA) Transformation inverse
Avantages et inconvénients de la méthodeCe n'est pas toujours facile d'évaluer F-1(U).
Dans le pire cas, on utilise des tables avec interpolation.
Méthode parfois lente et coûteuse.
Nous avons besoin d'un seul U pour chaque X :
cela facilite la synchronisation des valeurs aléatoires lorsqu'on fait plusieursrépétitions avec un même germe pour comparer différents systèmes ou différentesstratégies.
C'est la méthode qu'il faut privilégier.
Chapitre XI - Génération de valeurs pseudo-aléatoires