previous up next contents index
Previous: 1.5 Le test du Up: 1. Générateurs uniformes Next: 1.7 Le test des   Contents   Index

Subsections

1.6 Le test du millefeuille (Marsaglia)

1.6.1 Passage en dimension deux

Lorsque l'on dispose d'un générateur effectivement aléatoire et uniforme maths, on peut construire un générateur effectivement aléatoire et uniforme de points dans maths par maths, et même par maths si l'inter-dépendance des points obtenus n'est pas un objectif. Mais si nous partons d'un générateur pseudo-aléatoire, il est tout à fait possible que maths soit un générateur acceptable sur maths sans que maths soit utilisable comme générateur même médiocre dans maths.

Or le problème de la génération de points uniformément répartis dans un carré se pose de façon quasi inévitable, même pour résoudre des problèmes unidimensionnels. En effet la plupart des générateurs unidimensionnels non uniformes partent non pas d'un point aléatoirement réparti dans un segment donné, mais d'un point uniformément situé dans un carré. Tel est en particulier le cas pour les générateurs efficaces de variables réparties selon la loi normale.

Commençons par des remarques valables pour tout générateur pseudo-aléatoire, les problèmes spécifiques aux générateurs congruentiels, les plus utilisés, étant examinés par la suite. Du fait de sa nature essentiellement finie et déterministe, un générateur est nécessairement périodique, et la suite des points maths a évidemment la même période. Si cette période est maths, chaque instanciation dispose en moyenne d'un millionième de la place disponible.

On peut alors modéliser la situation en considérant les six premiers chiffres décimaux de maths comme formant six variables iid, uniformément réparties dans l'ensemble des chiffres, tandis que les chiffres suivants de maths sont déterminés par la donnée des six premiers. Mais avec un tel modèle, le nombre maths est totalement déterminé par maths et donc par la donnée des six premiers chiffres de ce nombre.

Une seconde façon de modéliser la situation consiste à considérer les trois premiers chiffres des deux nombres maths et maths comme formant six variables iid, uniformément réparties dans l'ensemble des chiffres, la connaissance de ces variables permettant de déterminer les chiffres restants des deux nombres.

Ces deux modèles sont également valables, mais il est clair qu'il n'est pas possible de les utiliser simultanément. Il est également clair que la sémantique attachée à l'expression "générateur aléatoire uniforme de points dans un carré" relève du deuxième modèle et non du premier : il est donc important de ne pas réintroduire le premier par la petite porte.

Ainsi, la structure en réseau des générateurs congruentiels que nous allons examiner dans le reste de cette section ne doit pas être mal interprétée. Pour une période maths (cf figure 1.8) une structure comme celle de gauche doit être rejetée car elle a des effets à une distance maths, nettement supérieure à maths tandis que la structure de droite, faisant intervenir des distances de cet ordre, est invisible sous les hypothèses d'utilisation du générateur.


1.6.2 Réseau engendré par un générateur congruentiel

Après ces remarques générales, étudions plus en détail le cas des générateurs congruentiels, c'est à dire définis par maths (pour maths) ou encore par maths (pour maths). Nous nous limiterons au cas où maths est un nombre premier et maths une racine primitive, la période du générateur étant alors maths.

Considérons les points maths : ce sont les réductions modulo maths de maths points tous alignés sur la droite maths du plan maths. Cette réduction modulaire a pour effet de scinder cette droite en maths segments distants entre eux de maths. La figure 1.6 en montre deux exemples : maths où les points se répartissent sur 2 segments distants de maths, et maths où les points se répartissent sur 3 segments de pente maths et distants entre eux de maths.

Figure 1.6: Effet du multiplicateur pour le module maths.
[maths]maths[maths]maths

Lorsque le multiplicateur augmente, on constate que d'autres alignements deviennent prépondérants. Ainsi, maths (figure 1.7, à gauche) fait apparaître non seulement des alignements sur maths segments de pente maths, distants entre eux de maths, mais aussi sur maths segments de pente maths, distants entre eux de maths ainsi que sur maths segments de pente maths, distants entre eux de maths.

Il est aisé de montrer qu'un alignement principal ayant maths (fraction irréductible) pour pente comporte maths segments, distants entre eux de maths. On constate également que, pour chaque direction principale, il existe une direction conjuguée telle que l'ensemble des intersections des deux réseaux de droites se compose de l'origine et des maths points atteints par le générateur.

Ainsi, pour maths (figure 1.7, à droite), voit-on apparaître les pentes maths et maths. Un calcul immédiat montre que l'aire de la maille élémentaire déterminée par les réseaux formés par les droites maths maths et maths et maths est maths. On peut alors vérifier que maths, maths et enfin que maths.

Figure 1.7: Choix optimal du multiplicateur pour le module maths.
[maths]maths[maths]maths

1.6.3 Un algorithme de minimax

Pour résumer ce qui précède, on peut dire qu'en dimension 2 un générateur congruentiel engendre en tout premier lieu un réseau de points, cette structure étant pleinement apparente lorsque l'on utilise une période complète du générateur. On remarquera que cet état de fait n'est pas nécessairement apparent lorsque l'on se limite à l'utilisation d'une faible fraction de la période. Mais en tout état de cause, il est préférable de choisir un multiplicateur tel que le maximum de la distance réticulaire, c'est à dire le maximum de la distance entre deux droites d'une même direction principale, soit le plus petit possible.

Cette recherche de minimax se programme en deux étapes. Un premier programme (algorithme 5) parcourt, pour un multiplicateur donné maths, l'ensemble des dénominateurs maths possibles et trouve le plus petit numérateur maths qui lui soit associé, en utilisant la fonction maths qui donne le reste dans maths, c'est à dire maths tel que maths.

On remarquera que, pour des raisons de vitesse d'exécution, le problème a été replacé par la recherche du minimum de l'inverse du carré de la distance réticulaire, que l'on initialise par la valeur maths clairement supérieure à la quantité cherchée. Le mécanisme de seuil (ligne repérée par maths) est un heuristique qui sera utilisé par le second programme. En utilisation indépendante, on prend maths. Ainsi a-t-on maths correspondant à la fraction maths.


maths

Le second programme consiste à essayer toutes les valeurs possibles de maths et à conserver la meilleure. L'algorithme proposé parcourt l'ensemble des racines primitives de maths en utilisant la fonction Maple maths qui est telle que maths donne la première racine primitive modulo maths strictement supérieure à maths.

Plusieurs moyens peuvent être employés pour accélérer cette recherche. Une première technique, spécifique au problème posé consiste à remarquer que les quatre nombres maths, maths, maths et maths sont simultanément racines primitives et ont alors les mêmes réseaux associés. Cette remarque fait gagner un facteur 4.

Une deuxième technique, commune à toutes les recherches de minimax, consiste à arrêter la recherche du maximum associé à une valeur donnée de maths dès que l'on a obtenu une valeur supérieure au meilleur (c'est à dire plus petit) maximum déjà trouvé pour les valeurs précédentes de maths. On aboutit à l'algorithme 6.
maths

En troisième lieu, une remarque de caractère heuristique permet de limiter grandement l'intervalle des valeurs à explorer pour maths. Si le réseau réalisant le minimax était exactement un réseau carré, sa maille aurait exactement pour longueur maths. Or pour tout maths la distance réticulaire associée à la pente maths est supérieure à maths : le maximum associé à un tel maths étant encore supérieure, il est inutile de considérer les maths.

En appliquant l'algorithme précédent au nombre premier maths, on trouve que le minimum du maximum (minimax) est atteint pour maths, conduisant aux directions maths et maths et aux distances maths et maths. A titre de comparaison, maths. Sur la figure 1.8, on constate la très nette différence d'aspect entre le réseau correspondant à un multiplicateur primitif "quelconque" (ici maths, avec une distance réticulaire maths) et le réseau correspondant au minimax.

Figure 1.8: Multiplicateur quelconque et multiplicateur optimal (cas maths).
[maths]maths[maths]maths

1.6.4 Algorithme de Gauss-Euclide

L'algorithme de minimax décrit au paragraphe précédent ne résout pas complètement le problème du choix du meilleur multiplicateur pour un module donné. En effet, la complexité de cet algorithme est quadratique puisqu'il se compose de deux boucles imbriquées, la boucle intérieure utilisée pour rechercher la distance réticulaire maximale ayant une complexité en maths. Or, pour des raisons qui ont été exposées par ailleurs, l'utilisation de grands modules (de l'ordre du carré du nombre d'instanciations voulues) est souhaitable. Il est donc intéressant de disposer d'un algorithme plus efficace.

Considérons le réseau à points entiers formé par l'ensemble des points qui s'écrivent maths avec maths. Une façon d'obtenir ce réseau est de paver le plan par des reproductions du carré maths contenant les points maths du 1.6.2. Une autre façon d'obtenir ce réseau est de constater qu'il est formé des combinaisons linéaires à coefficients entiers (relatifs) des vecteurs maths et maths. L'objectif est donc de trouver le vecteur de plus petit module de ce réseau, la distance réticulaire associée étant l'inverse de ce module.

Cette recherche peut être conduite efficacement en modifiant légèrement un algorithme bien connu, à savoir l'algorithme d'Euclide de recherche du pgcd. Cet algorithme modifié, qui est dû à Gauss, est le suivant. Notons maths le produit scalaire de deux vecteurs, et partons d'un couple donné de vecteurs maths. Si maths est le plus long des deux, permutons les deux vecteurs. Autrement dit, imposons que maths. Si maths est négatif, remplaçons maths par maths. Autrement dit, imposons que l'angle entre les vecteurs soit aigu. Prenons alors la partie entière approchée du quotient de maths par maths, soit maths. Si maths, le vecteur maths est plus court que le vecteur maths, et nous recommençons avec le couple maths.


maths

Si maths, il n'existe aucun vecteur maths (avec maths) qui soit plus court que maths et la base maths est formée des vecteurs ayant la longueur minimale : maths est donc le vecteur réalisant le minimum de longueur. Comme cette longueur est l'inverse de la distance séparant les droites réticulaires associées à la direction conjuguée (qui est donc celle de maths), cet algorithme de Gauss constitue bien une autre méthode de recherche du minimax voulu.

Or la complexité de l'algorithme d'Euclide est logarithmique : la recherche du multiplicateur maths réalisant le minimax réticulaire pour un module donné maths est donc un problème en maths. Dans l'algorithme 7, un vecteur (soit maths) est représenté par un record composé de la liste de ses coordonnées (accessible par maths) et de son carré scalaire (accessible par maths). Comme son nom l'indique, dotprod calcule le produit scalaire de deux listes.

1.6.5 Structure réticulaire pour maths

L'existence d'une structure réticulaire pour les points engendrés par les instanciations successives d'un générateur congruentiel se manifeste encore plus fortement pour les dimensions supérieures à 2. Dans ce qui suit, nous nous limiterons à maths, mais la généralisation à maths est immédiate.

Considérons donc maths points maths situés dans le cube maths, et formons un réseau en pavant l'espace par des cubes égaux à ce cube principal. Une base de ce réseau est fournie par les vecteurs maths, maths et maths, et il suffit d'appliquer successivement l'algorithme précédent à toutes les paires de vecteurs de la base jusqu'à ce que plus aucune réduction ne soit possible.

Dans l'algorithme 8, les permutations sont utilisées en ordre décroissant, c'est à dire maths pour maths de façon à privilégier les vecteurs de plus petite longueur. Et le résultat est conditionné sous la forme d'une matrice contenant les vecteurs de la base réduite. Ainsi,

maths


maths

Un raisonnement de géométrie élémentaire montre que la distance réticulaire maximale s'obtient en considérant le volume de la maille élémentaire. On a maths. On en déduit que la distance réticulaire (entre les points fournis par le générateur, c'est à dire les points de maths) est donnée par maths. Nous donnons ci-dessous les carrés des distances réticulaires maths correspondant aux trois faces de la maille élémentaire des multiplicateurs possibles (maths) pour le module maths.

maths

On voit sur cet exemple (simpliste) que le choix du multiplicateur doit être effectué avec soin.


previous up next contents index
Previous: 1.5 Le test du Up: 1. Générateurs uniformes Next: 1.7 Le test des   Contents   Index


douillet@ensait.fr
2005-01-04