Simulación Basada en Agentes · Tema 28

Juego de la Vida de Conway

Nacer, sobrevivir o morir según vecinos: tres reglas que parpadean, viajan y computan.

01 · Punto de partida

Tres reglas que no se acaban

En el Tema 27 la tabla B/S era un parámetro. Ahora fijamos la famosa: B3/S23. Con solo nacer con 3 y seguir con 2–3 aparecen bloques que jamás cambian, parpadeos de período 2, planeadores que viajan en diagonal y cañones que disparan naves para siempre.

Por eso la Vida es el emblema de emergencia (Tema 20): lo complejo sale de lo mínimo y hasta computa. Entenderla es entender qué puede una regla local (Tema 18) con tick parejo (Tema 16).

  • ¿Con cuántas vecinas nace una muerta?
  • ¿Con cuántas sigue una viva?
  • ¿Qué formas persisten, oscilan o viajan?
  • ¿Qué pasa si cambio un número de la tabla?

02 · Definición

Nacer, seguir y morir

Toda la Vida cabe en tres renglones sobre vecindad Moore con toroide y tick síncrono:

✚

Nacer

Muerta con exactamente 3 vivas revive: la fertilidad justa. Con 2 no alcanza, con 4 sobra.

●

Seguir

Viva con 2–3 sigue: compañía sin multitud. El equilibrio estrecho que sostiene formas.

✖

Morir

Resto muere o sigue muerto: soledad con 0–1 y multitud con 4–8 matan. El freno que poda.

La misma tabla, cuatro destinos.
FormaQué hacePor qué persiste
Bloque 2×2quieta para siemprecada viva ve 3 y sigue
Parpadeo de 3oscila período 2vertical ↔ horizontal
Planeador de 5viaja en diagonalnace adelante, muere atrás
Sopa aleatoriahierve y se raleamultitud mata más de lo que nace

03 · Formas

Sopa que hierve frente a semilla que persiste

El azar produce chispas que mueren; el diseño produce máquinas que vuelven. La tabla trata distinto a cada una.

Sopa aleatoria

Caos que se ralea

Densidad inicial d con toroide: hierve y cae a ~3 %. Sobreviven bloques y parpadeos entre cenizas.

Semilla diseñada

Máquina que vuelve

5 celdas en forma de planeador: avanza 1 en diagonal cada 4 ticks. El diseño viaja, el azar no.

Vida estable
Forma que no cambia: bloque, colmena. Cada viva tiene 2–3 y cada muerta lindera evita el 3.
Oscilador
Forma periódica: parpadeo período 2, sapo, faro. Nace y muere en loop parejo.
Nave
Forma que se desplaza: planeador en diagonal. Ninguna celda viaja: la forma viaja.
Sopa y cenizas
Aleatoria inicial y lo que queda tras hervir. Medir vivas y cambios separa una de otra.

04 · Ciclo

La generación B3/S23

Cada tick cuenta Moore en toroide y vuelca parejo, en este orden:

sembrar→contar 3 / 2–3→volcar
  1. 1
    Sembrar.

    Sopa con densidad o semilla exacta (bloque, parpadeo, planeador) en toroide.

  2. 2
    Contar y aplicar.

    Muerta con 3 nace; viva con 2–3 sigue; resto muere. Todo en buffer nuevo.

  3. 3
    Volcar y catalogar.

    Reemplazar y medir vivas y cambios: fija, oscilador, nave o sopa.

05 · Representación en Python

Un paso B3/S23 con toroide

El toroide envuelve con módulo: salir por derecha es entrar por izquierda. El buffer separa leer de escribir.

Python en tu navegador. Sembrá el parpadeo y comprobá que vuelve cada 2 ticks.

def paso_vida(g):
    H, W = len(g), len(g[0])
    n = [[g[r][c] for c in range(W)] for r in range(H)]
    for f in range(H):
        for c in range(W):
            v = sum(g[(f+df) % H][(c+dc) % W]
                    for df in [-1,0,1] for dc in [-1,0,1] if df or dc)
            n[f][c] = (v == 3) if not g[f][c] else (v in (2, 3))
    return n

g = [[0]*5 for _ in range(5)]
for c in [1,2,3]: g[2][c] = 1
g2 = paso_vida(g)
print(sum(map(sum, g2)))

La barra de 3 sigue con 3 vivas pero acostada: el parpadeo conserva conteo y cambia forma.

Sembrar el planeador

Cinco celdas exactas que en 4 ticks avanzan un paso en diagonal.

g = [[0]*6 for _ in range(6)]
for f, c in [(1,2),(2,3),(3,1),(3,2),(3,3)]:
    g[f][c] = 1
for _ in range(4):
    g = paso_vida(g)
print(sum(map(sum, g)))

06 · Exploración

Laboratorio: semillas que vuelven, sopas que se apagan

Rejilla toroidal 30 × 18 con tick parejo B3/S23. Elegí semilla: sopa aleatoria con densidad, bloque quieto, parpadeo período 2 o planeador viajero. Las métricas separan fija de oscilante y sopa de nave.

EXPERIMENTO 28

B3 nace, 2–3 sigue

muerta+3 nace · viva+2–3 sigue

Los resultados numéricos aparecen debajo.
Vivas0
Cambios0
Período–
LecturaSopa

El bloque queda fijo y el parpadeo vuelve cada 2.

Amarilla viva y oscura muerta en toroide. La densidad solo vale para sopa; las semillas se siembran al centro. Pulsá Nueva réplica para otra sopa.

Preguntas para explorar

  1. Con bloque y 80 rondas, ¿cuántos cambios hay? ¿Por qué la forma fija es el cero de la Vida?
  2. Con parpadeo y rondas par contra impar, ¿cuántas vivas hay? ¿Qué delata al período 2?
  3. Con sopa repetida 3 veces, ¿el final es idéntico? ¿Qué parte es B3/S23 y qué parte es sopa?
Ver respuestas sugeridas
  1. Cero: cada viva ve 3 y sigue, cada muerta evita el 3. Fija es equilibrio exacto de la tabla.
  2. Siempre 3 vivas: la forma rota pero el conteo vuelve. Período 2 es misma cuenta cada 2 ticks.
  3. No: cada sopa hierve distinto. La tabla es fija; la disposición inicial arma cenizas distintas.

07 · Comprensión

Confusiones frecuentes

«Nace con 2 o 3»

Nace solo con 3; con 2 solo sigue la que ya vive. Confundir B con S crea otro autómata.

«El planeador se mueve»

Ninguna celda se mueve: mueren atrás y nacen adelante. La forma viaja, las celdas mutan.

«Más densidad da más vida»

Más densidad da más multitud que mata: la sopa densa se apaga más. Vida premia el medio, no el lleno.

«Vale en async»

El parpadeo y el planeador exigen vuelco parejo. En async se deforman: Vida es síncrona o es otra cosa.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: tabla en una línea

Ejecutá y verificá nacer, seguir y morir. Luego cambiá B a {2} y observá otro universo.

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

print(vida(False, 3), vida(True, 2), vida(True, 4), vida(False, 2))
Ver solución razonada

Da True, True, False, False: nace con 3, sigue con 2, muere con 4 y con 2 no nace. Cada número tiene rol.

Ejercicio 2: predecir el bloque

Sin ejecutar primero: bloque 2×2 aislado. ¿Cuántas vivas tras 1 tick? Comprobalo después.

print(4)
Ver solución

Quedan 4: cada viva del bloque ve exactamente 3 y sigue, ninguna muerta lindera llega a 3. Fija perfecta.

Ejercicio 3: soledad que mata

Celda viva sola con 0 vecinas y muerta con 3. ¿Quién vive tras el tick?

Ver una posible respuesta
print(vida(True, 0), vida(False, 3))

Da False, True: la sola muere y la muerta fértil nace. Soledad y fertilidad en una línea.

09 · Síntesis

Ideas para recordar

  • Vida es B3/S23 en Moore con toroide y tick parejo: 3 nace, 2–3 sigue.
  • Bloque fija, parpadeo oscila período 2, planeador viaja en 4 ticks.
  • Sopa hierve y se ralea: la multitud mata más de lo que nace.
  • Semilla exacta con coordenadas: un pixel decide nave o ceniza.
  • En Python, toroide con módulo, buffer nuevo y tabla por pertenencia.

En el próximo tema estudiaremos los modelos de segregación: preferencias leves que crean barrios divididos.