Simulación Basada en Agentes · Tema 27

Autómatas celulares

Rejillas donde cada celda es un agente simple: quietas, vecinas y cambiando a la vez.

01 · Punto de partida

Agentes que no caminan

Hasta ahora los agentes se movían, elegían y aprendían. Ahora quietud total: cada celda es un agente fijo que solo mira a sus linderas y cambia de estado. Sin movimiento, sin memoria larga, sin jefe. Y sin embargo la rejilla hierve: naves que viajan, cañones que disparan, laberintos que crecen.

Ese es el autómata celular: el laboratorio mínimo de emergencia (Temas 19–20) con reglas locales (Tema 18) y tick síncrono (Tema 16).

  • ¿Qué estados tiene cada celda: viva o muerta, qué más?
  • ¿A quién mira: Moore con diagonales o von Neumann en cruz?
  • ¿Con cuántos vecinos nace, sobrevive o muere?
  • ¿Cambian todas a la vez o de a una?

02 · Definición

Celda, vecindad y transición

Todo autómata combina dónde está, a quién mira y cómo cambia:

▣

Celda

El agente quieto con estado discreto: viva o muerta, 0 o 1. No se mueve: muta.

◍

Vecindad

Las linderas que cuentan: Moore 8 con diagonales, von Neumann 4 en cruz (Temas 13–14).

⇄

Transición

La tabla nacer/sobrevivir: con 3 nace, con 2–3 sigue. Corta, total y sin excepciones.

La misma tabla en cada dominio.
MundoEstadosTransición típica
Vidaviva o muertanace con 3, sigue con 2–3
Incendioverde, fuego, cenizaverde con fuego vecino arde
Tráfico celularlibre u ocupadaavanza si la de adelante libera
Opinión en grillaA o Bcopia mayoría de linderas

03 · Fijeza

Móviles que se cruzan frente a celdas que contagian

El móvil lleva su estado a otra parte; la celda lo pasa a la lindera. El movimiento se vuelve contagio.

Agentes móviles

Cuerpos que caminan

Posición real o celda con cuerpo: me muevo y me llevo mi estado. Mezclan y chocan (Temas 12–15).

Celdas fijas

Casillas que mutan

Posición entera inmutable: me quedo y cambio según vecinas. Baratas, paralelas y perfectas para difusión.

Autómata celular
Rejilla de celdas-agente con vecindad fija y transición síncrona. Lo mínimo que genera naves y cañones.
Notación B/S
Nacer con / Sobrevivir con: Vida es B3/S23. Cambiar un número es otro universo.
Borde
Fijo muerto o toroide que envuelve (Tema 7). El borde fijo mata naves; el toro las recircula.
Tick síncrono
Todas a la vez con doble buffer (Tema 16). En async el autómata clásico se rompe.

04 · Ciclo

La generación que se vuelca pareja

Cada generación cuenta sobre la foto y vuelca junta, en este orden:

contar→aplicar→volcar
  1. 1
    Contar vecinas.

    Vivas en Moore o von Neumann sobre la foto t, sin tocar nada.

  2. 2
    Aplicar la tabla.

    Nacer, sobrevivir o morir según B/S en un buffer nuevo.

  3. 3
    Volcar parejo.

    Reemplazar la grilla: toda la generación salta a t+1 junta.

05 · Representación en Python

Contar vivas y decidir con conjuntos

Nacer y sobrevivir son conjuntos de números: la regla es pertenencia, no fórmula.

Python en tu navegador. Cambiá B o S en un número y observá cómo otro universo aparece.

def vivas_moore(grilla, f, c):
    n = 0
    for df in [-1, 0, 1]:
        for dc in [-1, 0, 1]:
            if df == 0 and dc == 0:
                continue
            nf, nc = f + df, c + dc
            if 0 <= nf < len(grilla) and 0 <= nc < len(grilla[0]):
                n += grilla[nf][nc]
    return n

g = [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
print(vivas_moore(g, 1, 1))

El centro ve 2 vivas: sus extremos verticales. Las diagonales vacías no suman.

Tabla B/S en una línea

Vida es nacer con 3 y seguir con 2–3; el resto muere o sigue muerto.

def vida(viva, n, nacer={3}, seguir={2, 3}):
    return (n in nacer) if not viva else (n in seguir)

print(vida(False, 3), vida(True, 2), vida(True, 4))

06 · Exploración

Laboratorio: misma sopa, otra regla

La misma disposición inicial aleatoria con densidad dada evoluciona en rondas síncronas con toroide. Compará Vida (B3/S23, naves y osciladores) contra Laberinto (B3/S12345, muros que crecen). La regla, no la sopa, decide el universo.

EXPERIMENTO 27

La tabla manda

B/S + toroide + tick parejo

Los resultados numéricos aparecen debajo.
Vivas0 %
Cambios0
Actividad0 %
LecturaSopa

En Vida la sopa se ordena en formas que persisten.

Cada celda es amarilla viva u oscura muerta en rejilla toroidal de 30 × 18. El tick es síncrono con doble buffer. Pulsá Nueva réplica para otra sopa con la misma densidad.

Preguntas para explorar

  1. Con 0 rondas, ¿difieren Vida y Laberinto? ¿Cuándo empieza a mandar la tabla?
  2. Con densidad mínima y 80 rondas, ¿qué regla deja más vivas? ¿Por qué Laberinto casi no muere?
  3. Repetí la misma densidad 3 veces en Vida. ¿El porcentaje final es idéntico? ¿Qué parte es regla y qué parte es sopa?
Ver respuestas sugeridas
  1. No: sin ticks solo se ve la sopa inicial. La tabla manda desde la primera generación.
  2. Laberinto: sobrevive con 1–5 vecinas y casi nada muere; Vida exige 2–3 y ralea. Un número en S cambia el universo.
  3. No: la sopa arma historias distintas. La tabla es fija; la disposición inicial no.

07 · Comprensión

Confusiones frecuentes

«Celda es lo mismo que agente móvil»

La celda no se mueve: muta según vecinas. Sin posición que actualizar, el costo y los patrones son otros.

«B/S son detalles»

B/S es el modelo: un vecino de diferencia separa Vida de Laberinto. Se declaran como B3/S23, no como prosa.

«El borde no se nota»

El borde fijo mata todo lo que lo toca; el toroide recircula naves. Con grilla chica el borde es protagonista.

«Async da casi lo mismo»

Async rompe osciladores y naves clásicas: el orden de barrido se vuelve regla fantasma. Lo clásico es síncrono.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: contar sin contarse

Ejecutá y verificá que el centro no se cuenta. Luego probá en una esquina.

g = [[1, 1, 0], [1, 1, 0], [0, 0, 0]]
print(vivas_moore(g, 1, 1), vivas_moore(g, 0, 0))
Ver solución razonada

Da 3 y 3: el centro ve 3 sin contarse y la esquina ve 3 con solo 3 vecinas existentes. El borde recorta.

Ejercicio 2: predecir el parpadeo

Sin ejecutar primero: barra vertical de 3 en Vida. ¿Qué pasa en 1 tick? Comprobalo después.

# centros: (1,1) con 2 sigue, extremos con 1 mueren, (1,0) y (1,2) con 3 nacen
print("vertical -> horizontal")
Ver solución

La barra vertical se vuelve horizontal y al siguiente vuelve: el parpadeo es el oscilador mínimo. Nacer y morir en un tick.

Ejercicio 3: otra regla, otro mundo

Celda viva con 1 vecina en Vida y en Laberinto (S12345). ¿Sobrevive en ambas?

Ver una posible respuesta
print(vida(True, 1), vida(True, 1, nacer={3}, seguir={1,2,3,4,5}))

Da False, True: Vida la mata de soledad y Laberinto la deja. Un número en S, otro universo.

09 · Síntesis

Ideas para recordar

  • Autómata es celda fija con vecindad y tabla B/S más tick síncrono.
  • Moore abre diagonales y von Neumann no: la vecindad cambia el universo.
  • Borde y tick se declaran: toroide recircula, fijo mata, async rompe.
  • La tabla manda más que la sopa: misma inicial,macro distinto.
  • En Python, contar Moore sin centro y decidir por pertenencia a B/S.

En el próximo tema estudiaremos el Juego de la Vida de Conway: nacer, sobrevivir o morir según vecinos.