previous up next contents index
Previous: 2. Générateurs non uniformes Up: 2. Générateurs non uniformes Next: 2.2 Echantillons et permutations   Contents   Index

Subsections

2.1 Sélection dans un ensemble fini

2.1.1 Choix uniforme d'éléments d'un ensemble

Pour obtenir des pseudo-instanciations maths d'une variable entière maths uniformément répartie dans l'intervalle maths à partir d'un générateur congruentiel, il serait mathématiquement possible d'utiliser maths. Mais, en fait, les chiffres de plus fort poids ont une meilleure distribution, et il est préférable d'utiliser l'algorithme suivant :


maths

Pour que la séquence engendrée soit de bonne qualité, il convient d'utiliser un module au moins égal au carré du nombre d'éléments à sélectionner (maths) ou bien de n'utiliser qu'une très faible partie de la période (maths). En effet, la séquence issue du générateur est "sans aucune répétition" tandis que la probabilité pour qu'une séléction non exhaustive de maths éléments parmi maths soit "sans répétitions" est maths. D'où maths et maths pour maths. Un développement limité donne maths : lorsque maths, la probabilité d'au moins une collision lors d'un tirage effectivement aléatoire vaut environ 40% !

2.1.2 De la bonne programmation des aiguillages

Demandons-nous maintenant comment sélectionner un objet parmi maths, avec des probabilités proportionnelles à une liste de nombre positifs donnés, que nous appellerons les chances de sélection. On a donc, par définition, maths. Considérons par exemple, la sélection d'un nombre entier dans l'intervalle maths, avec des chances proportionnelles aux nombres maths.

Ce problème a été totalement résolu par l'algorithme de Walker, que nous présenterons en fin de cette section. Mais il existe bien d'autres façons de procéder, moins efficaces certes, mais plus susceptibles de généralisation à d'autres situations.

Une première possibilité est la suivante. On dresse la table des chances cumulées, soit maths. Ces nombres découpent en maths sous-intervalles adjacents l'intervalle maths. Il est immédiat que le numéro (soit maths) du sous-intervalle dans lequel tombe une instanciation (uniforme) de maths constitue une instanciation d'une variable aléatoire ayant la loi voulue.

Cette méthode consiste en fait à utiliser la fonction inverse de la fonction de répartition (en modifiant adéquatement la signification du mot inverse, puisque la fonction n'est pas bijective). Une implémentation immédiate conduit à l'algorithme 12.


maths

Cette implémentation par choix successifs, va engendrer maths tests par appel. Il est clair qu'un tri par chances décroissantes ne peut qu'améliorer les performances (dans l'exemple considéré, on passe à une moyenne de maths tests). Mais on reste encore avec une complexité en maths, tandis qu'une implémentation arborescente, conduisant à l'algorithme 13, permet d'obtenir un nombre de comparaisons en maths.


maths

2.1.3 Méthode de tir (Monte-Carlo)

Examinons maintenant la "méthode de tir", qui est un algorithme probabiliste en ce sens que le déroulement des calculs n'est pas fixé d'avance. En particulier, le nombre d'accès effectifs au générateur uniforme change d'une instanciation à l'autre. L'idée de base, illustrée figure 2.1(a), consiste à inscrire l'histogramme des chances dans un rectangle.

Si nous sélectionnons uniformément des points dans ce rectangle jusqu'à obtenir un point dans l'histogramme et que nous répétons ce processus, nous obtiendrons des points uniformément répartis dans cet histogramme. Par conséquent, chaque barre de l'histogramme sera visitée proportionnellement à sa hauteur, conduisant à la loi de répartition voulue.

Figure 2.1: Sélection par la méthode de tir.
[Histogramme des chances.]maths[Histogramme expérimental.]maths

Le nombre moyen de points qu'il faut sélectionner dans le rectangle pour obtenir une instanciation est visiblement égal au rapport des surfaces et vaut ici maths. Nous appelerons cette quantité le "facteur de tir" de l'algorithme. Dans le cas général, chaque essai nécessite deux appels au générateur uniforme, le premier maths servant à déterminer le candidat, et le deuxième maths servant à rendre le verdict.

Lorsque maths est petit, l'algorithme 14 permet d'éviter ce deuxième appel. En effet la détermination de maths en tant que partie entière de maths (la relation exacte étant maths) laisse inutilisée la quasi-totalité des "chiffres aléatoires" de maths. On peut donc rendre le verdict en utilisant maths comme instanciation de maths au lieu d'obtenir cette instanciation par un nouvel appel du générateur uniforme.


maths

La figure 2.1(b) donne un exemple d'histogramme obtenu en maths instanciations du générateur. Cette simulation a engendré maths appels au générateur uniforme (valeur théorique maths), et le score maths de l'histogramme obtenu est de maths.

2.1.4 Choix pondéré dans un ensemble fini (Walker)

Pour choisir un élément maths parmi maths avec des probabilités maths proportionnelles à des nombres maths donnés, il existe une méthode tout à fait extraordinaire, puisqu'elle est à temps constant. L'algorithme 15 en donne le principe (dû à Walker, 1974).


maths

La variable maths uniformément répartie dans maths nous sert en premier lieu à choisir uniformément une méthode de tir parmi les maths possibles, puis la "partie inutilisée" de maths, c'est à dire la partie fractionnaire de maths, fournit le verdict utilisé par la méthode de tir sélectionnée. Toute l'affaire consiste à construire les deux tables maths et maths, contenant l'une les seuils de rejet (nombres de maths) et l'autre des entiers dans maths 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 maths et

maths

ce vecteur ayant été normé pour que la somme de ses éléments soit égale à maths. Nous allons trier les éléments de maths par valeur croissante, tout en mémorisant l'indice d'origine, ce qui conduit à la liste :

maths

A chaque étape de l'algorithme, nous allons supprimer le premier élément de maths et modifier le dernier (et donc le replacer à l'endroit nécessaire pour que maths 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 mathset maths, nous supprimons le couple maths et nous remplacons la valeur mathspar maths. Autrement dit, le couple maths est remplacé par le couple maths, qui vient s'intercaller entre maths et maths. Nous obtenons donc une nouvelle liste de maths nombres positifs et de somme maths : il est clair que le procédé peut être répété tant que maths n'est pas vide. On obtient l'algorithme 16 et les listes :

maths


maths

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 maths d'instanciations fournies par le générateur qui est susceptible de devenir important, bien plus que le nombre maths d'objets à choisir. Le fait d'utiliser une liste pour représenter maths, et de la retrier (maths) à chaque fois que l'on a supprimé le premier élément (maths) donne une complexité (approximativement) quadratique en maths : une meilleure implémentation peut se révéler utile lorsque maths augmente. En pareil cas, il peut devenir nécessaire d'utiliser une nouvelle instanciation du générateur uniforme comme verdict dans l'algorithme principal.


previous up next contents index
Previous: 2. Générateurs non uniformes Up: 2. Générateurs non uniformes Next: 2.2 Echantillons et permutations   Contents   Index


douillet@ensait.fr
2005-01-04