Simulación Basada en Agentes · Tema 08

Interacción agente-entorno

La doble flecha: el mundo alimenta y frena al agente, y el agente gasta, marca y transforma el mundo.

01 · Punto de partida

El mundo no es un escenario pintado

En el Tema 7 diseñamos el mundo; ahora lo ponemos en movimiento. Un agente lee el entorno (¿hay pasto aquí?) y lo escribe (come, pisa, marca, construye). El entorno responde: se agota, se regenera o queda marcado para el siguiente.

Esa ida y vuelta crea la primera retroalimentación del curso: comer hoy deja menos para mañana, y el hambre de mañana cambia dónde buscar.

  • ¿Qué lee el agente del entorno?
  • ¿Qué le quita, le agrega o le cambia?
  • ¿El recurso se regenera o se acaba?
  • ¿La marca de uno guía al siguiente?

02 · Definición

Leer, gastar y marcar

Tres formas de tocar el mundo, de la más simple a la más sutil:

●

Consumir

Quitar recurso: comer pasto, gastar presupuesto, ocupar una cama. Crea competencia si no alcanza.

✎

Marcar

Dejar información: feromona, huella, reseña. Otros la leen después sin haberse cruzado: estigmergia.

▣

Transformar

Cambiar la estructura: abrir un camino, talar, construir. El mundo futuro ya es otro.

La doble flecha en cada dominio.
MundoEl agente leeEl agente escribe
Praderapasto del parchecome y lo deja pelado; el pasto rebrota
Hormigueroferomona del suelorefuerza el rastro al volver con comida
Ciudadcamas libresocupa y libera camas del hospital
Mercadoprecio y stockcompra y mueve precio y stock

03 · Acoplamiento

Cuando el recurso no alcanza

El caso que funda la ecología y la economía de agentes: muchos quieren lo mismo y el mundo se vacía.

Entorno pasivo

Comida infinita

Comer no deja huella: cada agente vive aislado y nunca compiten. Útil para depurar, inútil para estudiar escasez.

Entorno activo

Pasto finito que rebrota

Comer pela el parche y obliga a moverse; el rebrote marca el ritmo sostenible. Aparece la capacidad de carga.

Consumo
Cantidad retirada por acto: comer 2 de pasto por paso. Sin tope vacía el mundo en un día.
Regeneración
Crecimiento por paso hasta un máximo: el pasto rebrota 0,5 con tope 10.
Capacidad de carga
Población que el rebrote sostiene sin pelar el mundo. Más agentes, colapso.
Marca
Información depositada que otros leen: feromona que se evapora con el tiempo.

04 · Ciclo

El paso con entorno vivo

Cada paso actualiza agentes y mundo, en este orden:

percibir parche→comer / marcar→rebrotar mundo
  1. 1
    Percibir el parche.

    ¿Cuánto pasto hay donde estoy parado?

  2. 2
    Consumir o marcar.

    Comer hasta saciarse o hasta pelar; dejar marca si corresponde.

  3. 3
    Regenerar el mundo.

    Cada parche rebrota un poco hasta su tope, coman o no.

05 · Representación en Python

Parches que se comen y rebotan

El entorno guarda una lista de pasto por parche. Comer es restar con tope en cero; rebrotar es sumar con tope máximo.

Python en tu navegador. Cambiá el consumo o el rebrote y observá si el parche se pela o se sostiene.

class Pradera:
    def __init__(self, parches=5, pasto=6.0, tope=10.0):
        self.pasto = [pasto] * parches
        self.tope = tope

    def comer(self, i, consumo=2.0):
        comido = min(self.pasto[i], consumo)
        self.pasto[i] -= comido
        return comido

    def rebrotar(self, tasa=0.5):
        self.pasto = [min(self.tope, p + tasa) for p in self.pasto]
        return self.pasto

m = Pradera(parches=3, pasto=6.0)
print(m.comer(0, consumo=2.0), m.pasto)
print(m.rebrotar(tasa=0.5))

Comer quita 2 y el rebrote devuelve 0,5: con ese balance el parche se pela en 4 visitas seguidas.

Acoplarlo al agente

El agente come de su parche y guarda energía; el mundo registra la extracción.

class Agente:
    def __init__(self, parche=0, energia=5):
        self.parche = parche
        self.energia = energia
    def pastar(self, pradera, consumo=2.0):
        self.energia += pradera.comer(self.parche, consumo)
        return self.energia

m = Pradera(parches=2, pasto=4.0)
a = Agente(parche=1, energia=5)
print(a.pastar(m), m.pasto)

06 · Exploración

Laboratorio: pastoreo con rebrote

La pradera es una grilla: verde oscuro hay pasto, marrón está pelada. Los agentes (puntos) comen de su parche y el pasto rebrota cada paso. Probá combinaciones: ¿cuántos agentes aguanta el rebrote antes de pelar el mundo?

EXPERIMENTO 08

Comer hoy, rebrotar mañana

pasto(t+1) = pasto − comido + rebrote

Los resultados numéricos aparecen debajo.
Pasto medio0,0
Parches pelados0 %
Comido total0
LecturaSostenible

Con 25 agentes y rebrote 0,5, la pradera se sostiene.

Cada celda es un parche: cuanto más verde, más pasto. Los puntos claros son agentes. Pulsá Nueva réplica para otra historia con los mismos parámetros.

Preguntas para explorar

  1. Poné rebrote en 0 con 25 agentes. ¿Qué le pasa al pasto medio? ¿El colapso es rápido o lento?
  2. Subí el rebrote al máximo con 80 agentes. ¿Alcanza o el mundo se pela igual?
  3. Repetí la misma configuración 3 veces. ¿El pasto medio final es idéntico? ¿Qué parte es regla y qué parte es encuentro?
Ver respuestas sugeridas
  1. El pasto medio cae a cero y queda pelado: sin rebrote todo consumo es definitivo. El colapso es gradual porque los agentes se reparten por parches.
  2. A veces ni el rebrote máximo sostiene 80 bocas: la extracción total supera la regeneración total. Esa es la capacidad de carga.
  3. No es idéntico: quién pisa cada parche es azaroso. La regla (comer 2, rebrotar r) es fija; la historia de pisadas no.

07 · Comprensión

Confusiones frecuentes

«Comer es solo sumar energía»

Comer también resta pasto. Sin el descuento en el entorno, dos agentes comen el mismo bocado y la escasez desaparece del modelo.

«El rebrote compensa todo»

Solo si la tasa por parche por la cantidad de parches supera el consumo total. La cuenta de balance manda, no la intuición.

«Marcar es decorar»

La marca solo existe si otro agente la lee y cambia su conducta. Feromona que nadie sigue es pintura.

«El orden agente-mundo da igual»

Comer antes o después de rebrotar cambia el resultado del paso. Fijá el orden (percibir → comer → rebrotar) y mantenelo.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: comer con tope

Ejecutá y verificá que no se puede comer más de lo que hay. Luego intentá comer 10 de un parche con 3.

pasto = [6.0, 6.0]

def comer(i, consumo=2.0):
    comido = min(pasto[i], consumo)
    pasto[i] -= comido
    return comido

print(comer(0), pasto)
print(comer(0, consumo=10.0), pasto)
Ver solución razonada

Primero come 2 y queda 4; luego come 4 (no 10) y queda 0: min impide pasto negativo y comer fantasmas.

Ejercicio 2: predecir el pelado

Sin ejecutar primero: parche con 6, consumo 2 y sin rebrote, ¿en cuántas visitas queda pelado? Comprobalo después.

p = 6.0
visitas = 0
while p > 0:
    comido = min(p, 2.0)
    p -= comido
    visitas += 1
print(visitas, p)
Ver solución

En 3 visitas queda en 0: 6 → 4 → 2 → 0. Sin rebrote, todo parche tiene los días contados.

Ejercicio 3: balance sostenible

Con 10 parches, consumo 2 por visita y rebrote 0,5 por parche, ¿cuántas visitas por paso aguanta el mundo sin pelarse?

Ver una posible respuesta
parches = 10
rebrote = 0.5
consumo = 2.0
print("visitas sostenibles:", (parches * rebrote) / consumo)

Aguanta 2,5 visitas por paso: el rebrote total (5) dividido el consumo por visita (2). Más bocas que eso y el mundo se pela: capacidad de carga en una línea.

09 · Síntesis

Ideas para recordar

  • Agente y entorno se actualizan mutuamente: leer, gastar/marcar, regenerar.
  • El consumo con tope evita comer fantasmas y crea competencia real.
  • El rebrote marca el ritmo sostenible y define la capacidad de carga.
  • La marca solo existe si otro la lee: estigmergia es comunicación por el mundo.
  • En Python, el entorno descuenta y regenera; el agente solo pide.

En el próximo tema estudiaremos la interacción entre agentes: encuentros directos que cambian estados.