• Aucun résultat trouvé

De mauvais générateurs dans de bons logiciels

Dans le document The DART-Europe E-theses Portal (Page 39-42)

Chapitre 1 : Problématique

II.2 De mauvais générateurs dans de bons logiciels

Les générateurs de nombres pseudo-aléatoires ont une obsolescence rapide au regard des applications nouvelles qui font une grande consommation de ces nombres.

Un bon générateur actuel sera très certainement inutilisable dans 10 ans.

Dans (Wichmann et Hill 1982), les auteurs vantent les mérites d’un générateur d’une période de 2,78 1013 qui permet de lancer des simulations qui consomment 1000 nombres par secondes pendant 880 années. Depuis peu, nous avons des simulations dans des domaines tels que la médecine nucléaire qui consomment jusqu’à 15 milliards de nombres pour seulement 12 heures d’exécution (Maigne, et al. 2004) et le temps total de simulation pour obtenir des résultats statistiques corrects est d’au moins trois ans.

Pour une telle simulation le générateur de Wichman et Hill, générerait 1 182 464 fois la même séquence de nombres.

On peut imaginer qu’avec des générateurs présentant une période inépuisable en pratique comme par exemple les générateurs de type Mersenne Twister (219937 tirages pour certains d’entre eux), nous sommes aujourd’hui à l’abri de ce processus d’obsolescence. Il n’en est rien ! Sur le site internet de Makoto Matsumoto6, le chercheur présente le générateur qu’il a conçu comme étant un générateur pour le 21ème siècle :

«

Mersenne Twister: Random number generator for (the beginning of ) 21st Century

». Il ajoute cependant par prudence entre parenthèse : « pour le début du ». En effet, même si le générateur Mersenne Twister 19937 est conçu sur des bases théoriques solides, il n’est pas exclu que des défauts significatifs soient découverts dans les années à venir, comme de fortes corrélations dans les séquences de nombres pseudo-aléatoires générées. On trouve de ce fait couramment des générateurs inadaptés aux problématiques actuelles même dans de bons logiciels.

II.2.1 ROOT

Le logiciel ROOT est un cadriciel orienté objet développé par le CERN (Brun et Rademakers 1997) pour l’analyse efficace de grandes quantités de données. Dans ce logiciel, un générateur de nombres pseudo-aléatoires est implémenté dans la classe

TRandom. Cette classe permet la génération de lois uniformes et non-uniformes. Toutes les générations de lois de probabilité sont basées sur le générateur uniforme. Ce générateur est, d’une part mal implémenté, et d’autre part présente de larges défauts

6 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/eindex.html

39

(Heinrich, TRandom PitFalls 2006). Les nombres en double précision produits par cette classe sont des nombres compris entre 0 et 1. Pour générer de tels nombres on fixe la partie exposant à 0 et on initialise les bits de la mantisse aléatoirement. La mantisse d’un nombre double précision (Figure 4) comprend 52 bits. Seulement, l’implémentation du générateur dans ROOT n’initialise que 31 bits sur les 52 de manière pseudo-aléatoire, les autres sont fixés à zéro.

Figure Figure Figure

Figure 4444 Extrait de WikipediaExtrait de WikipediaExtrait de WikipediaExtrait de Wikipedia : Structure d’un nombre double précision standard IEEE 754: Structure d’un nombre double précision standard IEEE 754: Structure d’un nombre double précision standard IEEE 754 : Structure d’un nombre double précision standard IEEE 754

Indépendamment de cette erreur d’implémentation, le générateur présente intrinsèquement des défauts. La génération d’une série de nombres après une initialisation du générateur TRandom avec le germe 228 est présentée dans le Code 1. La période de répétition est alors de 2.

Code Code Code

Code 1111 Extrait de Extrait de Extrait de Extrait de (Heinrich, TRandom PitFalls 2006)(Heinrich, TRandom PitFalls 2006)(Heinrich, TRandom PitFalls 2006) Génération d’une séquence de nombres pseudo(Heinrich, TRandom PitFalls 2006)Génération d’une séquence de nombres pseudoGénération d’une séquence de nombres pseudoGénération d’une séquence de nombres pseudo----aléatoires aléatoires aléatoires aléatoires avec la classe TRandom de ROOT

avec la classe TRandom de ROOTavec la classe TRandom de ROOT avec la classe TRandom de ROOT

Enfin, la classe TRandom de ROOT permet de générer des nombres pseudo-aléatoires selon une approximation de la loi de poisson. L’article (Heinrich, TRandom PitFalls 2006) montre que l’approximation de la loi de poisson est si mauvaise qu’elle est inutilisable.

II.2.2 CLHEP

La bibliothèque CLHEP (Lönnblad 1994) (Class Library for High Energy Physic) également développée par le CERN depuis 1992, est utilisée dans des environnements

40

de simulations en physique des hautes énergies comme Geant4 (Allison et al. 2006) ou GATE (Jan et al. 2004).

Cinq des douze générateurs implémentés dans cette bibliothèque ne doivent pas être utilisés dans un contexte de simulation (Heinrich, Detecting a Bad Random Number

Code 2222 Extrait de la classe MTwistEngine de CLHEPExtrait de la classe MTwistEngine de CLHEPExtrait de la classe MTwistEngine de CLHEP Extrait de la classe MTwistEngine de CLHEP

De plus, à cause d’une erreur de programmation dans le générateur uniforme

RandomEngine, les suites de nombres générées avaient pour moyenne théorique 5/8 sur les plateformes linux. Ce bug n’a été détecté et corrigé qu’en 2004 (Heinrich, Detecting a Bad Random Number Generator 2004).

Enfin, en observant le code source de CLHEP, nous avons trouvé un problème dans la génération des nombres doubles précision par l’algorithme Mersenne Twister 19937. Le Code 2 présente un extrait de la classe qui implémente l’algorithme Mersenne Twister 19937, de la version la plus récente de la bibliothèque CLHEP (2.0.3.1). Le nombre entier sur 32 bits mt[count624] est utilisé deux fois pour générer la mantisse du nombre double précision. Les bits de poids fort (51 à 19) et faible (18 à 0) sont donc identiques.

Nous avons vu dans cette partie que des générateurs de nombres pseudo-aléatoires de faible qualité ou présentant des erreurs d’implémentation sont couramment présent dans des logiciels réputés et utilisés à des fins scientifiques. Même si la qualité du générateur de nombres pseudo-aléatoires est importante, elle n’est pas suffisante.

41

Obtenir des résultats crédibles en simulation stochastique nécessite une démarche rigoureuse qui n’est pas toujours suivie comme le montre la partie suivante.

Dans le document The DART-Europe E-theses Portal (Page 39-42)