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:
Donde:
- es el número generado en el paso n.
- m es el módulo, .
- a es el multiplicador, .
- C es la constante aditiva o el incrmento .
- es la semilla o el valor inicial, . Suele ser la hora actual del sistema.
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):
- m y C deben ser primos relativos entre sí ().
- a - 1 debe ser divisible por todos los factores primos de m.
- Si m es divisible por 4, entonces a - 1 debe ser divisible por 4.
Para este ejemplo, se elegirán los siguientes valores (los cuales son usados en C++ minstd_rand
):
- , que es un número primo muy grande.
- a = 48271, que cumple con las condiciones mencionadas.
- C = 0, que también las cumple.
- , para reproducibilidad de los resultados.
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 , 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.