Tests Diehard

Les tests Diehard consistent en une batterie de tests statistiques permettant de mesurer la qualité d'un générateur de nombres aléatoires. Ils ont été élaborés par George Marsaglia (en) pendant plusieurs années et publiés pour la première fois en 1995 sur un CD-ROM de nombres aléatoires[1].

Vue d'ensemble des tests

  • Espacements des anniversaires : choix de points au hasard sur un grand intervalle. L'espacement entre les points doit être réparti de manière exponentielle et asymptotique. Le nom est basé sur le paradoxe des anniversaires.
  • Chevauchement des permutations : analyse des séquences de cinq nombres aléatoires consécutifs. Les 120 ordres possibles doivent se produire avec une probabilité statistiquement égale.
  • Rangs de matrices : calcul du rang de matrices composé de bits provenant des nombres générés par le générateur de nombre aléatoire à tester et comptage de la fréquence des rangs de matrice.

Descriptions des tests

Le test d'espacement des anniversaires

m anniversaires sont choisis dans une année de n jours, en indiquant l'espacement entre les anniversaires. Si j est le nombre de valeurs qui apparaissent plus d'une fois dans cette liste, alors j peut-être approché par la loi de Poisson de moyenne m3 ÷ (4n). L'expérience montre que n doit être assez grand, disons n ≥ 218, pour comparer les résultats à la distribution de Poisson avec cette moyenne. Ce test utilise n = 224 et m = 29, de sorte que la distribution sous-jacente pour j est considérée comme étant de Poisson avec λ = 217 ÷ 226 = 2. Un échantillon de 500 est prélevé, et un test d'ajustement du χ² fournit une valeur p. Le premier test utilise les bits 1-24 (en comptant à partir de la gauche) à partir des nombres entiers du fichier spécifié. Ensuite, le fichier est fermé et rouvert. Ensuite, les bits 2-25 sont utilisés pour fournir les anniversaires, puis 3-26 et ainsi de suite jusqu'aux bits 9-32. Chaque ensemble de bits fournit une valeur p, et les neuf valeurs p fournissent un échantillon pour un KSTEST[pas clair].

Le test du chevauchement des permutations

Le test de chevauchement à 5 permutations : c'est le test OPERM5. Il examine une séquence d'un million d'entiers aléatoires de 32 bits. Chaque ensemble de cinq entiers consécutifs peut se trouver dans l'un des 120 états, pour les 5! ordres possibles de cinq nombres. Ainsi, les 5e, 6e, 7e... nombres fournissent chacun un état. Comme plusieurs milliers de transitions d'états sont observées, des comptes cumulatifs sont faits du nombre d'occurrences de chaque état. Ensuite, la forme quadratique dans l'inverse faible de la matrice de covariance 120×120 donne un test équivalent au test du rapport de vraisemblance selon lequel les 120 nombres de cellules proviennent de la distribution normale spécifiée (asymptotiquement) avec la matrice de covariance 120×120 spécifiée (avec le rang 99). Cette version utilise 1 000 000 entiers, deux fois. Ce test peut présenter des biais systématiques se traduisant par des valeurs p constamment faibles.

La plupart des tests Diehard renvoient une valeur p, qui devrait être uniforme sur [0,1] si le fichier d'entrée contient des bits aléatoires vraiment indépendants. Ces p-valeurs sont obtenues par p = F(X), où F est la distribution supposée de la variable aléatoire de l'échantillon X - souvent normale. Mais ce F supposé n'est qu'une approximation asymptotique, pour laquelle l'ajustement sera le plus mauvais dans les queues. Vous ne devriez donc pas être surpris par des valeurs p occasionnelles proches de 0 ou 1, comme 0,0012 ou 0,9983. Lorsqu'un flux binaire est vraiment GRAND, vous obtiendrez des p de 0 ou 1 à six endroits ou plus. Comme il existe de nombreux tests, il n'est pas improbable qu'un p < 0,025 ou un p > 0,975 signifie que le RNG a "échoué le test au niveau 0,05". Nous nous attendons à ce qu'un certain nombre de ces événements ps se produisent parmi les centaines d'événements produits par Diehard, même à condition que le générateur de nombres aléatoires soit parfait.

Classements/rangs de matrices binaires

On choisit le bit le plus à gauche de 31 nombres entiers générés aléatoirement par le GNR et on forme une matrice binaire de 31 par 31 et on détermine le rang. Ainsi on va compter quels sont les rangs obtenus sur 40 000 matrices générées par le GNR (les rangs possibles vont de 0 à 31 mais il est rare d'obtenir un rang inférieur à 28 pour une matrice générée), on compte la fréquence des rangs obtenus et on opère un test du χ² sur ces résultats. On peut procéder de la même façon avec des matrices de 32 par 32 avec cette fois-ci les matrices générées avec un rang inférieur à 29 qui sont peu probables.

Le test OPSO

OPSO vient de l'anglais Overlapping-pairs-sparse-occupancy qui veut dire « cumul de paires éparpillées ». Se base sur l'analyse de mots de 2 lettres provenant d'un alphabet particulier de 1024 lettres. Chacune de ces lettres est déterminée par 10 bits (d'où les 1024 lettres possibles car 210 = 1024) d'un entier de 32 bit donné par notre générateur congruentiel.

Et parmi tous les mots qu'il est possible de former avec un tel alphabet, notre test va compter le nombre de mots qui n'apparaissent pas. Cela se déroule comme suit :

Le générateur à tester va générer une séquence de 221 entrées (lettres) ; cette séquence va donc contenir des mots de 2 lettres les uns à la suite des autres et notre test OPSO va compter le nombre de mots manquants dans la séquence (on rappelle qu'il y a 1024×1024 = 1 048 576 mots de 2 lettres possibles).

Le nombre de mots manquant devrait être en moyenne de 141 909 avec un écart type de 290 pour que le GNR donne effectivement des nombres aléatoires.

Notes et références

  1. « The Marsaglia Random Number CDROM including the Diehard Battery of Tests », sur web.archive.org, (consulté le )

Articles connexes

Liens externes

  • Portail des probabilités et de la statistique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.