Inicio › Temas › Matemáticas discretas y algoritmos
🕸️ Matemáticas discretas y algoritmos nivel avanzado
Autómatas celulares
Reglas locales simplísimas que generan orden, caos y estructuras que se mueven.
🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)
La idea
Un autómata celular es una cuadrícula de celdas con un estado discreto que evoluciona en pasos de tiempo según una regla local: el estado siguiente de cada celda depende solo de su estado actual y del de sus vecinas. No hay coordinación central ni memoria global, y sin embargo el comportamiento colectivo puede ser extraordinariamente rico. En los autómatas elementales de Wolfram la cuadrícula es una única fila de celdas binarias y la vecindad son tres celdas (izquierda, centro, derecha): hay 2³ = 8 configuraciones posibles y a cada una se le asigna 0 o 1, lo que da 2⁸ = 256 reglas, numeradas por el byte resultante.
Dibujando las generaciones sucesivas una debajo de otra aparecen cuatro clases de conducta: reglas que mueren (clase 1), reglas periódicas (clase 2), reglas caóticas como la regla 30, cuya columna central pasa pruebas de aleatoriedad y se usó como generador pseudoaleatorio, reglas fractales como la regla 90, que reproduce el triángulo de Sierpiński a partir de una sola celda encendida, y reglas de estructuras complejas como la regla 110, de la que se ha demostrado que es computacionalmente universal: puede simular cualquier máquina de Turing.
En dos dimensiones el ejemplo canónico es el Juego de la vida de Conway, con vecindad de Moore (las ocho celdas contiguas) y dos reglas: una celda viva sobrevive con 2 o 3 vecinas vivas y una celda muerta nace con exactamente 3. De ahí emergen objetos con nombre propio: bloques y panales estables, osciladores como el pulsar de periodo 3 y naves como el planeador, que se desplaza una celda en diagonal cada cuatro generaciones. El Juego de la vida también es universal, lo que ilustra una idea profunda: la complejidad no requiere reglas complicadas, solo interacción local repetida.
Fórmulas clave
- Regla elementalsᵢ(t+1) = R[ 4·sᵢ₋₁(t) + 2·sᵢ(t) + sᵢ₊₁(t) ], R = bits del número 0-255
- Número de reglas elementales2^(2³) = 2⁸ = 256
- Bit de la reglabit k de r = (r >> k) & 1, con k = patrón de la vecindad
- Juego de la vida (supervivencia)viva y vecinas ∈ {2, 3} → sigue viva
- Juego de la vida (nacimiento)muerta y vecinas = 3 → nace
- Planeadorperiodo 4, desplazamiento (1, 1): velocidad c/4 en diagonal
Dónde se aplica
Los autómatas celulares se usan como modelos de sistemas donde la interacción es local: la propagación de incendios forestales y de epidemias en mallas espaciales, el flujo de tráfico con el modelo de Nagel-Schreckenberg (que reproduce atascos fantasma a partir de reglas triviales) y la formación de patrones en conchas y pieles de animales. En ingeniería se emplean redes de Boltzmann de red, parientes cercanos, para simular fluidos, y en ciencias de la computación las reglas caóticas como la 30 se han usado para generar números pseudoaleatorios y como componente de funciones hash.
Con programación (Python)
def paso_elemental(fila, regla):
n = len(fila)
nueva = []
for i in range(n):
izq, cen, der = fila[(i - 1) % n], fila[i], fila[(i + 1) % n]
patron = 4 * izq + 2 * cen + der
nueva.append((regla >> patron) & 1)
return nueva
ancho = 41
for regla in (90, 30):
fila = [0] * ancho
fila[ancho // 2] = 1
print(f"--- regla {regla} ---")
for _ in range(12):
print("".join("#" if c else "." for c in fila))
fila = paso_elemental(fila, regla)
# Juego de la vida: un planeador se desplaza (1,1) cada 4 generaciones
vivas = {(1, 2), (2, 3), (3, 1), (3, 2), (3, 3)}
def paso_vida(vivas, alto, ancho):
cuenta = {}
for (r, c) in vivas:
for dr in (-1, 0, 1):
for dc in (-1, 0, 1):
if dr or dc:
k = ((r + dr) % alto, (c + dc) % ancho)
cuenta[k] = cuenta.get(k, 0) + 1
return {k for k, v in cuenta.items() if v == 3 or (v == 2 and k in vivas)}
print("planeador inicial:", sorted(vivas))
for g in range(4):
vivas = paso_vida(vivas, 20, 20)
print("tras 4 generaciones:", sorted(vivas), "(desplazado 1 fila y 1 columna)")La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.
Temas relacionados
Recursión y memoización · Crecimiento logístico · Método Monte Carlo · Complejidad y notación O grande