Supongamos que estoy usando un generador de números pseudoaleatorio congruencia lineal (PRNG). Dada una semilla , el factor de multiplicación (a), el factor de desplazamiento (c) y el factor de módulo (m), ¿cómo puedo determinar el período de mi PRNG? ¿Lo determino mediante algoritmos de experimentación / detección de patrones, o existe una fórmula directa para calcular su período?
Aunque mi pregunta es específicamente sobre el método congruencial lineal, estoy abierto a saber más sobre cómo se calculan los períodos en la práctica para otros PRNG también.
Respuestas:
Si se limita al ciclo completo de LCG PRNG s, entonces la respuesta es fácil, por definición es simplementemetro .
Para encontrar el período de un LCG PRNG de ciclo no completo para una semilla dada, solo necesita contar el número de iteraciones de la PRNG hasta que genere el valor de semilla una vez más.
Desde la página de Wikipedia a la que se hace referencia :
¿Por qué quieres usar un generador de ciclo completo?
Si no se limita a los PRNG de LCG de ciclo completo, entonces está asumiendo un gran riesgo .
Si no sabe que un LCG dado es un ciclo completo, entonces podría terminar con un generador con un número arbitrario de secuencias mutuamente distintas, algunas de las cuales podrían ser vergonzosamente pequeñas y tener una aleatoriedad espantosa, posiblemente incluso peor que el infame generador RANDU .
Realmente no desea tener que verificar cada valor inicial posible para asegurarse de que genera una secuencia que sea lo suficientemente larga para su aplicación.
Otras lecturas
Para una excelente introducción a los generadores de números pseudoaleatorios, le recomiendo encarecidamente que lea el capítulo Recetas numéricas sobre números aleatorios.
fuente