01 · Punto de partida
Las reglas necesitan un mundo
Hasta ahora los agentes percibían vecinos en un cuadrado abstracto. Pero ¿qué tamaño tiene ese cuadrado? ¿Qué pasa al llegar al borde? ¿Hay comida, muros o salidas? El entorno responde esas preguntas y condiciona cada decisión.
Dos corridas con la misma regla y distinto entorno cuentan historias opuestas: con muros la multitud se apelotona en las esquinas; en un toroide fluye sin fin; con obstáculos aparecen atajos y cuellos de botella.
- ¿Qué tamaño y forma tiene el mundo?
- ¿Qué recursos y obstáculos contiene?
- ¿Qué ocurre en los bordes: muro, salida o portal?
- ¿El entorno cambia con el tiempo o es fijo?
02 · Definición
Espacio, contenido y bordes
Todo entorno combina tres ingredientes:
Espacio
La topología: rejilla de celdas o plano continuo, tamaño y escala. Define qué significa “cerca”. (Temas 14–15)
Contenido
Lo que hay dentro: comida que se agota, muros que bloquean, salidas que absorben, feromonas que marcan.
Bordes
La regla del límite: muros que rebotan, mundo toroidal que envuelve o salidas que eliminan agentes.
| Entorno | Ejemplo | Efecto típico |
|---|---|---|
| Habitación con muros | Evacuación | Arcos y apelotonamiento en la puerta. |
| Toroide sin bordes | Bandada abstracta | Flujo continuo sin esquinas trampa. |
| Rejilla con obstáculos | Tráfico urbano | Cuellos de botella y rutas alternativas. |
| Pradera con pasto | Depredador-presa | Ciclos de abundancia y escasez. |
03 · Bordes
La decisión más silenciosa del modelo
El borde nunca es neutral: define si el mundo es una isla, un planeta circular o un escenario con entradas y salidas.
Mundo con muros
Isla cerrada
Al llegar al límite el agente rebota o se queda: x = min(1, max(0, x)). Fácil de explicar, pero crea esquinas donde se acumulan agentes.
Mundo toroidal
Planeta sin fin
Salir por la derecha es entrar por la izquierda: x = x % 1. Elimina esquinas y sirve para estudiar mecanismos puros.
- Celda / posición
- Unidad mínima de lugar: casilla discreta o coordenada continua donde puede haber agentes.
- Recurso
- Contenido consumible: comida, dinero, pasto. Se agota y puede regenerarse.
- Obstáculo
- Contenido que bloquea: muro, río, edificio. Cambia rutas y vecindarios.
- Borde
- Regla del límite: muro, toroide o salida. Siempre debe escribirse y justificarse.
04 · Diseño
Diseñar el mundo en cuatro decisiones
Antes de poblar, fijá el escenario por escrito:
- 1Tamaño y escala.
¿Plaza de 1×1 o ciudad de 100×100? El tamaño junto con N define la densidad, que manda en los encuentros.
- 2Contenido.
¿Cuánta comida, dónde, se regenera? ¿Hay muros o salidas? Cada contenido es un experimento futuro.
- 3Bordes y salidas.
Muros para encierros, toroide para mecanismos puros, salidas para flujos con entradas y egresos.
05 · Representación en Python
El entorno es una clase con reglas de borde
El entorno guarda el tamaño y aplica el borde cada vez que un agente se mueve. Los agentes ya no se recortan solos: le preguntan al mundo.
Python en tu navegador. Cambiá el borde de muros a toro y observá qué le pasa a un agente que cruza el límite.
class Entorno:
def __init__(self, borde="muros"):
self.borde = borde # "muros" o "toro"
def limitar(self, x):
if self.borde == "toro":
return x % 1.0
return min(1.0, max(0.0, x))
mundo = Entorno(borde="muros")
print(mundo.limitar(1.2), mundo.limitar(-0.1))
mundo.borde = "toro"
print(mundo.limitar(1.2), mundo.limitar(-0.1))
Con muros todo queda en [0, 1]; en toro 1.2 entra por 0.2: el mismo movimiento, otro mundo.
Recursos que se agotan
El contenido vive en listas del entorno: comer es pedirle al mundo que retire una unidad.
import math
class Entorno:
def __init__(self):
self.comida = [(0.2, 0.2), (0.8, 0.8)]
def comer_si_hay(self, x, y, radio=0.1):
for i, (cx, cy) in enumerate(self.comida):
if math.hypot(x - cx, y - cy) < radio:
self.comida.pop(i)
return True
return False
m = Entorno()
print(m.comer_si_hay(0.22, 0.21), len(m.comida))
print(m.comer_si_hay(0.5, 0.5), len(m.comida))
06 · Exploración
Laboratorio: muros frente a toroide
Los mismos N agentes caminan igual durante T pasos. Con muros rebotan y se acumulan en bordes y esquinas; en toroide cruzan el borde y reaparecen del otro lado, sin esquinas trampa. Compará cruces, cobertura y dispersión.
El borde cambia la historia
mismo caminar, otro borde
Con muros no hay cruces: el mundo es una isla.
El rectángulo es el mundo. Con muros los puntos se frenan en el borde; en toroide las flechas marcan cada cruce como un portal. Las esquinas sombreadas revelan acumulaciones artificiales.
Preguntas para explorar
- Con 0 pasos, ¿difieren muros y toroide? ¿Cuándo empieza a importar el borde?
- Subí los pasos a 200 en ambos bordes. ¿Dónde terminan más agentes en esquinas y por qué?
- Si estudiás una plaza con salidas reales, ¿qué borde elegirías? ¿Y para estudiar bandadas puras?
Ver respuestas sugeridas
- No: sin movimiento solo se ve la inicialización. El borde importa cuando alguien intenta cruzarlo: es una regla de a dónde ir cuando no hay más mundo.
- Con muros: el rebote repetido arrincona agentes. En toroide no hay esquinas trampa y la ocupación es más pareja.
- Plaza con salidas: bordes con salidas que absorben (ni muros ni toro). Bandadas puras: toroide para no contaminar el mecanismo con esquinas.
07 · Comprensión
Confusiones frecuentes
«El entorno es el dibujo»
El dibujo muestra el entorno; el entorno es la clase con tamaño, contenido y bordes que el código aplica en cada paso.
«El borde no cambia nada»
El borde crea o destruye patrones: esquinas llenas, flujos cortados, densidades irreales. Siempre se declara y se prueba la alternativa.
«Recursos infinitos simplifican»
Comida infinita elimina la competencia que querías estudiar. Los recursos finitos con regeneración son el corazón de forrajeo y ecología.
«Cada agente guarda su copia del mundo»
Dos copias divergen y cada agente vive en un mundo distinto sin saberlo. Un solo entorno compartido, muchos lectores.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: aplicar el borde
Ejecutá y verificá qué devuelve cada borde para 1.3 y −0.2. Luego probá con 0.7.
def limitar(x, borde="muros"):
if borde == "toro":
return x % 1.0
return min(1.0, max(0.0, x))
print(limitar(1.3), limitar(-0.2))
print(limitar(1.3, "toro"), limitar(-0.2, "toro"))
Ver solución razonada
Muros: 1.0, 0.0. Toro: 0.3, 0.8. Con 0.7 ambos devuelven 0.7: el borde solo actúa al intentar salir.
Ejercicio 2: predecir el portal
Sin ejecutar primero: un agente en 0.95 avanza 0.1 en toroide 1×1. ¿Dónde termina? ¿Y con muros? Comprobalo después.
def limitar(x, borde):
return x % 1.0 if borde == "toro" else min(1.0, max(0.0, x))
print(limitar(0.95 + 0.1, "toro"))
print(limitar(0.95 + 0.1, "muros"))
Ver solución
Toro: 0.05 (cruza el portal). Muros: 1.0 (queda pegado al borde). El mismo paso, dos mundos.
Ejercicio 3: recurso que se agota
Dos agentes llegan a la misma comida. ¿Cuántos comen si la comida se retira al comer?
Ver una posible respuesta
comida = [(0.5, 0.5)]
def comer(x, y):
for i, (cx, cy) in enumerate(comida):
if abs(x - cx) < 0.05 and abs(y - cy) < 0.05:
comida.pop(i)
return True
return False
print(comer(0.51, 0.5), comer(0.52, 0.5), len(comida))
Solo el primero: True, False, 0. El recurso finito crea competencia: el orden de actualización decide quién come (Temas 16–17).
09 · Síntesis
Ideas para recordar
- El entorno es espacio × contenido × bordes, no un fondo decorativo.
- Los bordes (muros, toroide, salidas) cambian los patrones: siempre se declaran.
- Los recursos finitos crean competencia; los obstáculos crean rutas.
- En Python, el entorno centraliza bordes y recursos en una clase compartida.
- El mismo caminar cuenta otra historia según el mundo.
En el próximo tema estudiaremos la interacción agente-entorno: percibir recursos, consumirlos y modificar el mundo.