Generador pseudoaleatorio

El generador pseudoaleatorio congruencial mixto es un algoritmo que permite generar números pseudoaleatorios a partir de una semilla inicial. La relación de recurrencia es:

Xn+1=(aXn+C) mod mX_{n+1} = (a*X_n + C) \text{ mod } m

Donde:

Para calcular los valores apropiados de a, C y m, se deben cumplir ciertas condiciones para garantizar la calidad de la secuencia de números generados (Teorema de Hull–Dobell):

Para este ejemplo, se elegirán los siguientes valores (los cuales son usados en C++ minstd_rand):

Histogramas

Para 10 valores

Para 100 valores

Para 1000 valores

Conclusiones

Observando los histogramas, se puede notar que la distribución de los números generados se asemeja a una distribución uniforme, es decir, que todos los valores tienen la misma probabilidad de ser generados.

En cuanto a la elección de los valores de a, C y m, se ha demostrado que para un generador congruencial mixto, cuanto mayor sea el módulo mm, mejor será la calidad de los números generados. Sin embargo, elegir un módulo demasiado grande puede tener un efecto negativo en el rendimiento del generador.

La elección de los valores de a y C también es importante, ya que afecta directamente la calidad de los números generados. En general, se recomienda que m y C sean coprimos (es decir, que no tengan factores comunes) y que a y C sean valores grandes.

En resumen, para un generador pseudoaleatorio congruencial mixto, se deben elegir valores apropiados para a, C y m para obtener una buena calidad de números generados. La elección de valores óptimos puede ser compleja y se pueden encontrar numerosos estudios al respecto en la literatura especializada. En cualquier caso, es importante recordar que ningún generador de números aleatorios es completamente aleatorio y que es necesario evaluar cuidadosamente la calidad de los números generados en función de la aplicación específica.

Referencias

Knuth, D. (1998). The art of computer programming: seminumerical algorithms (Vol. 2). Addison-Wesley Longman.

"ISO/IEC 14882:2011". ISO. 2 September 2011. Retrieved 3 September 2011.

"computer-simulations.ipynb." 2 Mar. 2023, gist.github.com/sanchezcarlosjr/a8633fd691febea9c88f3c86aba173d8.