Números Pseudoaleatorios · Tema 02

Aleatoriedad frente a pseudoaleatoriedad

Por qué tu computadora no tiene azar real, cómo lo imita con fórmulas deterministas y cuándo esa imitación alcanza —y cuándo no— para simular.

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.

Comparación directa.
AspectoAleatorio verdaderoPseudoaleatorio
OrigenFenómeno físicoCálculo determinista
¿Predecible conociendo el método?NoSí, totalmente
¿Repetible?NoSí, con la misma semilla
VelocidadLenta, hardware especialMillones por segundo
Uso típicoSorteos, claves, criptografíaSimulació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 m en 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 / m en [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:

¿Necesito repetir?→¿Necesito seguridad?→¿Qué generador elijo?
  1. 1
    Simulación científica.

    Necesitás repetir para depurar y publicar → pseudoaleatorio con semilla fija y generador validado. Es el caso central del curso.

  2. 2
    Videojuegos y prototipos.

    Querés variedad, no rigor criptográfico → pseudoaleatorio común alcanza; la semilla permite repetir un bug o un nivel.

  3. 3
    Contraseñ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.

EXPERIMENTO 02

Determinismo visible

u(n) = x(n) / m

Los resultados numéricos aparecen debajo.
Primer valor A—
Primer valor B—
Diferencia máxima—
Lectura—

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

  1. Con A = B = 7, ¿coinciden todos los puntos? Recargá la página y repetí: ¿siguen coincidiendo?
  2. Poné A = 7 y B = 8. ¿Se parecen las secuencias? ¿Dirías a ojo cuál es «más aleatoria»?
  3. Si alguien conoce la fórmula y tu semilla, ¿puede predecir tu próximo valor? ¿Qué implica para sorteos?
Ver respuestas sugeridas
  1. Sí, siempre: el algoritmo es determinista. Recargar no cambia nada porque la semilla manda, no el momento.
  2. 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.
  3. 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.seed demuestra 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().