01 · Punto de partida
Del azar real al azar calculado
En el Tema 1 viste qué es la aleatoriedad: el próximo tiro es impredecible, pero miles de tiros muestran proporciones estables. Para simular necesitás justamente eso, pero en cantidades industriales: cientos de miles de valores, rápidos, disponibles con una línea de código y, encima, repetibles para poder depurar y publicar resultados.
El azar físico (tirar una moneda de verdad, medir ruido térmico) no sirve para eso: es lento, engorroso y nunca se repite igual. La solución es sorprendente: usar un algoritmo totalmente determinista que produzca secuencias que parecen aleatorias. Eso es la pseudoaleatoriedad.
- ¿Qué pierde y qué gana una secuencia calculada frente al azar físico?
- Si es determinista, ¿por qué no se nota a simple vista?
- ¿Cuándo alcanza un pseudoaleatorio y cuándo necesitás azar verdadero?
- ¿Qué rol juega la semilla en todo esto?
02 · Definición
Verdadero frente a pseudo
La diferencia no está en cómo se ven los números, sino en cómo se producen:
Aleatorio verdadero
Nace de un proceso físico impredecible: ruido electrónico, decaimiento, el giro exacto de un dado. Ni conociendo todo el pasado podés calcular el próximo valor.
Pseudoaleatorio
Nace de una fórmula: x(n+1) = f(x(n)). Conociendo la semilla y la fórmula, cualquiera puede predecir toda la secuencia, bit por bit.
Indistinguible en la práctica
Un buen generador pasa tests de uniformidad e independencia (Temas 27–28). Para la simulación, «parece azar» es suficiente si está validado.
La confusión típica es pedirle al pseudoaleatorio que sea «impredecible para todos». No lo es: es impredecible para quien no conoce la semilla ni el algoritmo, pero totalmente reproducible para quien sí los conoce. Esa es su fuerza para ciencia y su debilidad para seguridad.
| Aspecto | Aleatorio verdadero | Pseudoaleatorio |
|---|---|---|
| Origen | Fenómeno físico | Cálculo determinista |
| ¿Predecible conociendo el método? | No | Sí, totalmente |
| ¿Repetible? | No | Sí, con la misma semilla |
| Velocidad | Lenta, hardware especial | Millones por segundo |
| Uso típico | Sorteos, claves, criptografía | Simulación, juegos, muestreo |
03 · Anatomía
Qué hay dentro de un generador
Todos los generadores que verás (congruenciales, de bits, modernos) comparten el mismo esqueleto. Entenderlo ahora te ahorra memorizar cada algoritmo después:
- Semilla
- El valor inicial
x₀que elegís vos. Misma semilla → misma secuencia, siempre. (Tema 5 a fondo.) - Estado interno
- Lo que el generador recuerda entre llamadas. En los simples es solo
x(n); en los modernos, un vector de cientos de números. - Transición
- La regla que avanza el estado:
x(n+1) = (a·x(n) + c) mod men un congruencial lineal. Es lo que estudiarás en los Temas 12–14. - Salida
- La transformación a número usable, típicamente
u = x / men [0,1). Es el puente a los Temas 19–20.
Pseudo útil
Rápido y validado
Período enorme, uniforme, sin correlación visible y reproducible con semilla documentada.
Pseudo ingenuo
Rápido pero tramposo
Período corto, parámetros improvisados o semilla oculta: la simulación parece funcionar y está sesgada.
04 · Decisión
¿Cuándo alcanza lo pseudo?
La pregunta práctica no es «¿es verdaderamente aleatorio?» sino «¿es suficientemente bueno para mi uso?». Esta regla te orienta en todo el curso:
- 1Simulación científica.
Necesitás repetir para depurar y publicar → pseudoaleatorio con semilla fija y generador validado. Es el caso central del curso.
- 2Videojuegos y prototipos.
Querés variedad, no rigor criptográfico → pseudoaleatorio común alcanza; la semilla permite repetir un bug o un nivel.
- 3Contraseñas, sorteos con dinero, tokens.
Necesitás imprevisibilidad frente a un adversario → pseudo común no alcanza: se usa generador criptográfico o azar físico. Lo detallaremos en el Tema 18.
05 · Demostración en Python
random es pseudo: la prueba de la semilla
Si random fuera azar verdadero, nunca podrías repetir una secuencia. Pero podés: fijando la semilla con random.seed, obtenés exactamente los mismos números. Esa es la firma del determinismo.
Python en tu navegador. Ejecutá cada bloque dos veces: verás que con la misma semilla se repite idéntico, y que sin fijarla (o con otra semilla) cambia.
import random
random.seed(42)
print([random.random() for _ in range(5)])
random.seed(42)
print([random.random() for _ in range(5)])
Las dos listas son idénticas, bit por bit. Eso es imposible con azar físico: es la prueba de que hay una fórmula por dentro.
Distinta semilla, distinta secuencia
Cambiar la semilla cambia la secuencia completa, pero ambas siguen pareciendo azar. Esa es la propiedad que explotarás para réplicas y escenarios:
import random
random.seed(1)
print("semilla 1:", [round(random.random(), 4) for _ in range(5)])
random.seed(2)
print("semilla 2:", [round(random.random(), 4) for _ in range(5)])
06 · Exploración
Laboratorio: misma semilla, misma historia
Este laboratorio usa un mini-generador congruencial didáctico x(n+1) = (1664525·x(n) + 1013904223) mod 2³², normalizado a [0,1). Elegí dos semillas y la cantidad de valores: la curva lima es la semilla A y la naranja la semilla B. Si ponés A = B, se superponen perfecto.
Determinismo visible
u(n) = x(n) / m
Con A = B las curvas coinciden. Cambiá B para separarlas.
Cada punto es un valor uniforme en [0,1) generado por la fórmula. La superposición exacta con igual semilla demuestra el determinismo.
Preguntas para explorar
- Con A = B = 7, ¿coinciden todos los puntos? Recargá la página y repetí: ¿siguen coincidiendo?
- Poné A = 7 y B = 8. ¿Se parecen las secuencias? ¿Dirías a ojo cuál es «más aleatoria»?
- Si alguien conoce la fórmula y tu semilla, ¿puede predecir tu próximo valor? ¿Qué implica para sorteos?
Ver respuestas sugeridas
- Sí, siempre: el algoritmo es determinista. Recargar no cambia nada porque la semilla manda, no el momento.
- Son distintas pero ambas parecen azar; a ojo no hay «más aleatoria». La calidad se mide con pruebas (Temas 27–31), no mirando el gráfico.
- Sí, puede calcularlo exactamente. Por eso para seguridad se exigen generadores criptográficos (Tema 18), no un congruencial didáctico.
07 · Comprensión
Confusiones frecuentes
«Pseudo significa malo»
No: pseudo significa calculado. Un buen pseudo (Mersenne Twister, PCG) supera pruebas exigentes y es el estándar en simulación. Malo es el generador improvisado, no la idea.
«Si es determinista, se nota a ojo»
Con parámetros decentes no se nota: dos semillas vecinas (7 y 8) dan nubes indistinguibles a simple vista. Los defectos sutiles solo aparecen con tests y gráficos especiales.
«Con semilla = hora actual ya es verdadero»
No: la hora solo elige el punto de partida, pero la secuencia sigue siendo calculada y, si alguien conoce hora y algoritmo, la reproduce. Gana variedad, no imprevisibilidad criptográfica.
«Para simular, cualquier generador sirve»
Es el error más caro del curso: un período corto o una correlación escondida sesga promedios, colas y varianzas. Por eso los Temas 26–34 enseñan a desconfiar y probar.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: probar la reproducibilidad
Ejecutá este código dos veces seguidas. Luego cambiá la semilla a 99 y compará.
import random
random.seed(123)
a = [random.randint(1, 100) for _ in range(5)]
random.seed(123)
b = [random.randint(1, 100) for _ in range(5)]
print(a)
print(b)
print("idénticas:", a == b)
Ver solución razonada
Ambas listas son iguales (True). Con semilla 99 obtendrás otra lista distinta, pero también repetible. Determinismo no es repetición aburrida: es control.
Ejercicio 2: tu primer congruencial casero
Este mini-generador usa módulo chico (m = 16) a propósito para que veas el período con tus ojos. ¿Cuántos valores distintos produce antes de repetirse?
def mini_lcg(semilla, a=5, c=3, m=16, n=20):
x = semilla
sal = []
for _ in range(n):
x = (a * x + c) % m
sal.append(x)
return sal
print(mini_lcg(7))
Ver solución
Con esos parámetros el ciclo es de 16 valores como máximo (todo el módulo). Si probás a=4, c=2 verás un período mucho más corto: la secuencia se encierra en un subconjunto. Es el anticipo intuitivo de los Temas 13–14.
Ejercicio 3: ¿qué azar necesita cada caso?
Clasificá cada necesidad en pseudo común o criptográfico/físico: (a) 100 000 réplicas de una cola para estimar espera media, (b) generar la contraseña inicial de un usuario, (c) mezclar el mazo visible de un juego offline, (d) sortear un premio en dinero por internet.
Ver una posible respuesta
casos = {
"a_cola": "pseudo común con semilla fija",
"b_password": "criptográfico",
"c_mazo_offline": "pseudo común",
"d_sorteo_dinero": "criptográfico o físico auditado",
}
for k, v in casos.items():
print(k, "->", v)
La clave es el adversario: si alguien gana prediciendo tu secuencia (b y d), lo pseudo común es negligencia. Si solo necesitás realismo y repetición (a y c), lo pseudo es lo correcto.
09 · Síntesis
Ideas para recordar
- Aleatorio verdadero = físico e irrepetible; pseudoaleatorio = calculado y reproducible con semilla.
- Todo generador combina semilla, estado, transición y salida a [0,1).
- Un buen pseudo pasa pruebas estadísticas y alcanza para simular; para seguridad se exige otro nivel.
- En Python,
random.seeddemuestra el determinismo: misma semilla, misma secuencia. - La hora como semilla da variedad, no seguridad.
En el próximo tema veremos cómo hace una computadora para tener azar si es determinista: relojes, entropía del sistema y el camino desde el hardware hasta tu random.random().