Para entender la importancia de generar números pseudoaleatorios, debemos comenzar por la simulación. La simulación es el uso de técnicas estadísticas para imitar el comportamiento de sistemas del mundo real.
La simulación ganó notoriedad con el Proyecto Manhattan, donde se empleó para estudiar los flujos de neutrones en las bombas atómicas. Este uso pionero dio origen a la simulación de Montecarlo (un tipo de simulación fundamental) y es un claro ejemplo de su utilidad: nos permite predecir lo que sucede en situaciones complejas sin necesidad de probarlas directamente. (Este proceso, de hecho, se muestra en la película Oppenheimer).
Aleatorio vs. Pseudoaleatorio
Para construir las simulaciones (que forman parte de los modelos matemáticos de un sistema), es crucial generar distintos escenarios. Esto se logra mediante la creación de números aleatorios. Pero antes de ver cómo se generan, definamos los tipos:
- Números Aleatorios: Son impredecibles y provienen de un proceso físicamente aleatorio. Piensa en los resultados de una ruleta o los números de la lotería. Por su naturaleza, no se pueden predecir ni replicar.
- Números Pseudoaleatorios: Se generan a partir de una expresión o fórmula matemática. Por ello, no son verdaderamente aleatorios. Sin embargo, son impredecibles para cualquiera que no conozca la fórmula.
La Ventaja de la Replicabilidad
Si los números aleatorios son totalmente impredecibles, ¿por qué son tan valiosos los pseudoaleatorios?
Necesitamos poder replicar o generar de nuevo la misma secuencia de números para verificar los resultados. La posibilidad de volver a generar exactamente la misma secuencia nos permite analizar y determinar a qué se deben los distintos resultados obtenidos en una simulación. Esta es la gran ventaja de que provengan de una fórmula recursiva.
Obtención de Números Pseudoaleatorios
Las simulaciones dependen de números pseudoaleatorios. Aunque se pueden reproducir, deben estar diseñados de tal forma que aparenten ser aleatorios para que la simulación no falle.
Para lograr esta apariencia de aleatoriedad, los generadores deben cumplir propiedades matemáticas rigurosas, como pasar por rigurosas pruebas estadísticas (o contrastes de hipótesis). El objetivo es que los números pseudoaleatorios tengan características similares a los verdaderos números aleatorios.
Principios Básicos de la Generación
No existe un único método para generar estos números; solo deben cumplir con ser fácilmente reproducibles y aparentar ser aleatorios.
La práctica más habitual y sencilla es generar primero números aleatorios en el intervalo [0, 1) (números reales entre cero y uno, sin incluir el uno), y luego transformar esos valores si se necesita otro rango o distribución (por ejemplo, números del 0 al 10).
IMPORTANTE: En todos los métodos de generación es necesario fijar una semilla (seed). La semilla no es más que el número inicial que se usa para empezar a aplicar la fórmula recursiva y generar la secuencia.
Métodos Congruenciales de Generación
A continuación, se describen dos métodos populares para simular números pseudoaleatorios basados en la aritmética modular.
1. Método Congruencial Mixto
Este método genera una secuencia de números enteros X_i aplicando la siguiente fórmula recursiva:
xi = (axi-1+b) mod m
Donde los componentes se eligen cumpliendo ciertas condiciones:
| Componente | Definición | Condición |
| X0 | Semilla | Entero positivo (el número con el que se empieza). |
| m | Módulo | Entero positivo, m > X0 |
| a | Multiplicador | Entero, 0<a<m. |
| b | Incremento | Entero, 0<b<m |
El resultado Xi es un número entero. Para obtener el número pseudoaleatorio Ui en el intervalo [0,1), se realiza la división:
Ui= Xi/m
2. Método Congruencial Multiplicativo
Este método es muy similar al anterior, pero omite el término de incremento b=0, simplificando la fórmula:
Xi = aX{i-1} mod m
Las condiciones de elección de los parámetros son:
- Semilla (X0): entero positivo tal que 0<X0<m.
- Multiplicador (a): entero, 0 < a < m.
- Módulo (m): entero positivo.
Al igual que en el método mixto, para obtener el número aleatorio en [0, 1), se usa la relación Ui = Xi/mi.
NOTA: La operación N mod m (módulo m) es el resto de la división entera de N entre m. (Esto es válido siempre que trabajemos con enteros positivos).
Consideraciones Importantes
El Ciclo de Repetición (Período)
La cantidad de números que estos métodos pueden producir no es infinita; la secuencia es cíclica. Llega un punto en el que la secuencia de números pseudoaleatorios se repite, lo cual se llama período.
- Para lograr una secuencia lo más larga posible antes de que se repita, se aconseja utilizar números m lo más grandes posible.
- El lenguaje estadístico R y la librería random de Python utilizan algoritmos con un período de repetición de 219937-1 números, lo que garantiza secuencias extremadamente largas para cualquier simulación práctica.
Generación de Números Enteros en un Rango [a, b]
Una vez que tenemos el número aleatorio U en el intervalo [0, 1), podemos transformarlo para simular cualquier otra distribución. Para generar un número entero N entre dos valores fijos [a, b] (ambos incluidos), se utiliza la siguiente transformación:
N = a + [(b-a+1)U]
Donde:
- U es el número aleatorio en [0, 1).
- [ ] denota la función de truncamiento o parte entera.
Ejemplo: Un Dado Virtual (1 a 6)
Si queremos simular el lanzamiento de un dado que devuelva un número entero del 1 al 6:N = 1+ [(6-1+1)U] =1 + [6U]

