RANDU

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

RANDU est le nom d'un générateur congruentiel linéaire introduit dans les années 1960, sur des machines IBM System/370 ou d’autres machines 32 bits. Il est très impopulaire car il possède de nombreux biais auxquels ont dû faire face les personnes qui l'ont utilisé.

Il est défini par la relation de récurrence :

X_{n+1} \equiv (65539 \times X_n) \mod 2^{31}

avec X_0~ impair. On engendre des nombres réels pseudo-aléatoires entre 0 et 1 par

r_n \equiv  X_n / 2^{31}.

C'est l'exemple parfait du fait que le potentiel d'un générateur ne saurait en aucun cas garantir sa qualité. En effet, bien que son potentiel soit de 31 (le minimum requis pour un bon générateur est de 5), il donne des résultats plus que décevants au test spectral pour des dimensions supérieures à 2 et n’aurait donc jamais dû être utilisé. De plus l'absence d'incrément fait que sa période est faible (moins de 2^{30}).

Les défauts de ce générateur s'expliquent en remarquant que 65539 = 2^{16} + 3. C'est pour cela que ce générateur avait été introduit. En effet, la multiplication par 65539, opération lente sur les machines de l'époque, était remplacée par un algorithme plus rapide utilisant des additions et des décalages de bits (shift), puisque 65539 * x = shift(x,16) + shift(x,1) + x.

Malheureusement, un tel choix de multiplicateur, m = 2^{16} + 3, est un désastre pour les propriétés statistiques. En effet,

m^2 = 6 m -9 \mod 2^{31}.

On en déduit que trois nombres successifs X_n, X_{n+1} et X_{n+2} vérifient toujours la relation

X_{n+2} = 6 X_{n+1} - 9 X_n \mod 2^{31}.

Il en est de même pour les réels r_n qui vérifient

r_{n+2} = 6 r_{n+1} - 9 r_n \mod 1.

Cette relation donne des corrélations macroscopiques: par exemple, une modification des valeurs de r_n et r_{n+1} de l'ordre de 0,01, change la valeur de r_{n+2} d'au plus 0,15. Pour avoir un "bon" générateur, on souhaite une relation avec des coefficients beaucoup plus grands que 6 et 9, de telle manière qu'une petite modification de r_n ou r_{n+1} change complètement la valeur de r_{n+2}, pour donner l'illusion d'un tirage vraiment aléatoire.

Ce générateur est parfois étudié dans les cours, pour ses vertus pédagogiques.

...its very name RANDU is enough to bring dismay into the eyes and stomachs of many computer scientists!Donald E. Knuth

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]