Previous: 3. Loi de Student-Fischer
Up: Aide à la décision
Next: 5. About G/G queues
  Contents
Subsections
Un plan d'expérience nécessite des "nombres au hasard".
En effet :
- L'indépendance est indispensable.
- Le tirage au sort est le seul moyen de garantir cette indépendance
(et de pouvoir la prouver !).
- Il est donc nécessaire de savoir "tirer au sort par ordinateur"
selon des lois fixées par avance.
Remark 4.2.1
L'objectif poursuivi est de créer un comportement aléatoire au sein
d'un ordinateur, alors que cet ordinateur a tout au contraire été
conçu pour être strictement déterministe. A cet effet, on utilise
un dispositif fournissant des "nombres aléatoires".
Un tel dispositif peut être matériel, de la pièce de pile ou face
au compteur de désintégration radioactif en passant par une horloge
mesurant le nombre de micro-secondes entre deux frappes au clavier.
Definition 4.2.2
On appelle "générateur" un dispositif logiciel utilisant
un processus déterministe pour fournir des nombres ayant un comportement
réputé être indiscernable du comportement d'un processus effectivement
aléatoire.
Definition 4.2.3
On appelle "générateur aléatoire" (noté

dans ce qui suit) un calcul déterministe fournissant des nombres appartenant
à
![$ \left[0,1\right]$](img243.png)
et censés ressembler aux nombres que fournirait
une suite de variables aléatoires iid (indépendantes et identiquement
distribuées) selon la loi uniforme. Le code que nous utilisons est
donné par le ***.
Definition 4.2.4
Les générateurs censés imiter d'autres lois seront appelés : générateur
discret (pour un nombre fini de valeurs possibles), générateur exponentiel,
générateur normal, etc.
Remark 4.2.5
A nouveau : les "générateurs aléatoires" sont aussi
peu aléatoires que possible. Cette désignation est donc tout à fait
détestable, mais a l'avantage de la brièveté et de la consécration
par l'usage. Nous dirons donc qu'un générateur est bon ou mauvais
selon que les séquences obtenues possèdent ou non certaines
propriétés.
Remark 4.2.6
Propriétés statistiques. Un certain nombre des propriétés requises
sont de nature
statistique. Ainsi sera-t-il exigé que la moyenne
d'une séquence tant soit peu longue soit "raisonnablement
proche" de l'espérance de la variable. Une propriété analogue
est également exigée pour les variances : il suffirait sinon d'instancier

par

pour obtenir la bonne moyenne !
Remark 4.2.7
Propriété de période. Le générateur, prenant ses valeurs dans un ensemble
fini et étant déterministe, est nécessairement périodique. Il est
donc exigé que la période de ce générateur soit largement supérieure
à la longueur de toutes les séquences d'instanciations que l'on pourra
envisager d'utiliser.
Remark 4.2.8
Propriété de non-prévisibilité. Pour certaines applications (cryptographie,
jeux de hasard, etc. ) il est indispensable que le prochain tirage
ne soit pas prévisible à partir des tirages précédents. Pour d'autres
(simulations sur ordinateur) cette propriété n'est pas utile.
Remark 4.2.9
Propriétés complémentaires. En premier lieu vient la rapidité d'exécution
du générateur. En second lieu vient la qualité requise quant à la
preuve des propriétés du générateur. Il existe en effet des générateurs
"sans défauts connus", mais dont on ne connaît pas
non plus de preuve théorique de leurs qualités !
Algorithm 4.2.10 (générateur congruentiel)
En choisissant un nombre premier

"assez
grand" et un multiplicateur

qui soit un élément d'ordre
maximal, le générateur
est de période

. Comme il y a

éléments
primitifs vis à vis du module

, les

ne sont pas difficiles
à trouver. Pour une discussion plus précise, se reporter à (
Douillet, 2004).
Les L
ISTING 1 et L
ISTING 2 donnent les
générateurs utilisés respectivement par LGM (
Park and Miller, 1988)
et par Maple.
Algorithm 4.2.11 (générateur standard)
Pour générer uniformément des nombres décimaux
dans l'intervalle
![$ \left[0,\,1\right]$](img252.png)
, une division est nécessaire.
Un choix habile du module premier permet d'éviter le cout d'une division
en virgule flottante. Ainsi le générateur uniforme principal de Maple
est L
ISTING 3.
Algorithm 4.3.1
Pour obtenir des pseudo-instanciations

d'une
variable entière

uniformément répartie dans l'intervalle
![$ \left[1\,..\, n\right]$](img256.png)
, on utilise la partie entière par excès
de

, soit

(L
ISTING 4).
Remark 4.3.2
L'algorithme L
ISTING 4 est soumis aux limitations
: soit

soit

. Pour Maple,
cela fait

ou

.
Algorithm 4.4.1 (cas discret)
Soit à instancier une variable entière
![$ X\in\left[1,\, n\right]$](img264.png)
proportionellement à des chances

fixées d'avance.
Posons

.
Nous procédons en trois étapes : (a) tirage d'un candidat

, uniformément
parmi les valeurs possibles pour la variable ; (b) tirage d'un verdict,
uniformément dans l'intervalle
![$ \left[0,\, M\right]$](img267.png)
; (c) acceptation
ou rejet : si

on accepte la valeur

et,
sinon, on recommence jusqu'à obtenir une valeur acceptable.
Remark 4.4.2
Lorsque le nombre

est petit, et les chances normalisées pour
que

, on peut accélérer le processus en n'appelant qu'une seule
fois le générateur aléatoire (L
ISTING 5).
Algorithm 4.4.3 (support fini)
Cette méthode se généralise au cas d'une variable à
support borné
![$ X\in\left[a,\, b\right]$](img271.png)
distribuée selon une densité
bornée

. L'algorithme équivaut
à tirer uniformément un point dans le rectangle
![$ \left[a,\, b\right]\times\left[0,\, M\right]$](img273.png)
et à rejeter les points situés au-dessus du graphe de la fonction

.
Definition 4.4.4
On appelle facteur de tir la proportion de réussite par essai. On
a clairement :
qui est le rapport entre la surface utile (située sous le graphe)
et la surface totale du rectangle.
Remark 4.4.5
Il est clair qu'un choix

serait également possible,
mais aurait pour seul résultat de ralentir le processus. On supposera
toujours que le diagrame de tir a été optimisé pour que

.
Proposition 4.4.6
Le nombre moyen d'essais par valeur obtenue vaut
.
Exercise 4.4.7
Retrouver ce résultat en remarquant que
.
FIG. 4.1:
Un diagramme de tir.
|
|
Example 4.4.8
Considérons le diagramme de tir donné F
IG. 4.1.
Les chances correspondantes sont :
Utilisé "tel que", le facteur de tir est

.
Il est clair qu'une normalisation des chances optimise le processus.
En utilisant
le facteur de tir passe à

: il faut en moyenne

essais
par nombre engendré.
Algorithm 4.5.1
On modifie la méthode de tir, de façon à obtenir un facteur de tir
égal à 1 : lorsque le verdict est inférieur à

,
le résultat est

(comme précédemment). Dans le cas contraire,
le résultat est donné par une table auxiliaire (cf L
ISTING 6).
- La variable
uniformément répartie dans
nous sert en premier lieu à choisir uniformément une méthode
de tir parmi les
possibles, puis la "partie inutilisée"
de
, c'est à dire la partie fractionnaire de
, fournit
le verdict utilisé par la méthode de tir sélectionnée. Toute l'affaire
consiste à construire les deux tables
et
, contenant
l'une les seuils de rejet (nombres de
) et l'autre
des entiers dans
indiquant qui est choisi à la
place du candidat par défaut lorsque celui-ci est rejeté.
- Illustrons ce problème en considérant un exemple, avec
et
ce vecteur ayant été normé pour que la somme de ses éléments soit
égale à
. Nous allons trier les éléments de
par valeur
croissante, tout en mémorisant l'indice d'origine, ce qui conduit
à la liste :
A chaque étape de l'algorithme, nous allons supprimer le premier élément
de
et modifier le dernier (et donc le replacer à l'endroit
nécessaire pour que
reste triée par ordre croissant). Par
construction, le premier élément est inférieur ou égal à 1, et le
dernier est supérieur ou égal à 1. Nous posons donc
et
, nous supprimons le couple
et nous remplacons la valeur
par
.
Autrement dit, le couple
est remplacé
par le couple
, qui vient s'intercaller
entre
et
.
Nous obtenons donc une nouvelle liste de
nombres positifs et
de somme
: il est clair que le procédé peut être répété tant
que
n'est pas vide. On obtient le LISTING 7
et les listes :
- Remarque. Le codage donné ci-dessus pour l'initialisation de l'algorithme
de Walker n'a pas été optimisé outre mesure. En effet, c'est le nombre
d'instanciations fournies par le générateur qui est susceptible
de devenir important, bien plus que le nombre
d'objets à choisir.
Le fait d'utiliser une liste pour représenter
, et de la
retrier (
) à chaque fois que l'on a supprimé
le premier élément (
)
donne une complexité (approximativement) quadratique en
: une
meilleure implémentation peut se révéler utile lorsque
augmente.
En pareil cas, il peut également devenir nécessaire d'utiliser une
nouvelle instanciation du générateur uniforme comme verdict
dans l'algorithme principal.
Previous: 3. Loi de Student-Fischer
Up: Aide à la décision
Next: 5. About G/G queues
  Contents
douillet@ensait.fr
2007-09-25