Supposons que j'utilise un générateur de nombres pseudo-aléatoires congruents linéaires (PRNG). Étant donné une graine , le facteur multiplicateur (a), le facteur de décalage (c) et le facteur de module (m), comment puis-je déterminer la période de mon PRNG? Est-ce que je le détermine par des algorithmes d'expérimentation / détection de modèle, ou existe-t-il une formule directe pour calculer sa période?
Bien que ma question concerne spécifiquement la méthode congruentielle linéaire, je suis ouvert à en savoir plus sur la façon dont les périodes sont calculées dans la pratique pour d'autres PRNG également.
Réponses:
Si vous vous limitez à des cycles LCG PRNG complets, la réponse est simple, par définition, c'est tout simplementm .
Pour trouver la période d'un cycle LCG PRNG non complet pour une graine donnée, il vous suffit de compter le nombre d'itérations du PRNG jusqu'à ce qu'il génère à nouveau la valeur de la graine.
De la page wikipedia référencée :
Pourquoi vous souhaitez utiliser un générateur à cycle complet
Si vous ne vous limitez pas aux PRNG LCG à cycle complet, vous prenez un risque énorme .
Si vous ne savez pas qu'un LCG donné est un cycle complet, vous pouvez vous retrouver avec un générateur avec un nombre arbitraire de séquences mutuellement distinctes, dont certaines pourraient être embarrassantes et avoir un caractère aléatoire épouvantable, peut-être même pire que le fameux générateur RANDU .
Vous ne voulez vraiment pas avoir à vérifier chaque valeur de graine possible pour vous assurer qu'elle génère une séquence suffisamment longue pour votre application.
Lectures complémentaires
Pour une excellente introduction aux générateurs de nombres pseudo-aléatoires, je vous recommande fortement de lire le chapitre Recettes numériques sur les nombres aléatoires.
la source