01 · Punto de partida
De la ficha a la acción
En el Tema 4 el agente tenía su ficha completa: grupo, tolerancia, posición, energía. Pero una ficha quieta no simula nada. El comportamiento es la ficha en movimiento: lo que el agente efectivamente hace cuando le toca actuar.
Un forrajeador vaga, come o descansa. Un auto acelera, frena o cambia de carril. Una persona sale, se aísla o se vacuna. Cada modelo define un repertorio pequeño y una forma de elegir.
- ¿Qué acciones puede hacer este agente?
- ¿Cuándo elige cada una?
- ¿Cuánto dura y cuánto cuesta cada acción?
- ¿Qué cambia en el mundo después de ejecutarla?
02 · Definición
Tres familias de acciones
Casi todo repertorio combina estas tres familias:
Moverse
Cambiar de posición: vagar, acercarse a comida, huir de peligro, buscar salida. (Tema 12)
Transformarse
Cambiar el propio estado: gastar energía, enfermarse, cambiar de opinión, descansar.
Afectar a otros
Cambiar el entorno o a vecinos: comer una planta, contagiar, comprar, enviar un mensaje.
| Modelo | Repertorio | Fenómeno que aparece |
|---|---|---|
| Forrajeo | vagar, comer, descansar | Zonas peladas y senderos de explotación. |
| Tráfico | acelerar, frenar, mantener | Olas de frenado sin causa visible. |
| Contagio | salir, aislarse | Curvas epidémicas con picos. |
| Schelling | quedarse, mudarse | Barrios segregados. |
03 · Propiedades
Cómo es una buena acción
Una acción bien definida responde cuatro cosas antes de programarse:
Acción vaga
“Buscar comida”
Nadie sabe cuánto se mueve, cuánto gasta ni cuándo termina. Dos programadores la codifican distinto.
Acción simulable
“Avanzar 0,03 hacia la comida vista”
Declara condición, desplazamiento, costo y efecto. Se puede repetir, medir y comparar.
- Condición
- Cuándo se puede ejecutar: hay comida a menos de r, energía mayor que 2.
- Duración
- Cuánto ocupa: un paso, varios pasos. En este curso, casi siempre un paso.
- Costo
- Qué consume: energía, tiempo, dinero. Sin costo todo es gratis y nada es creíble.
- Efecto
- Qué cambia: nueva posición, menos energía, una planta menos, un vecino contagiado.
04 · Selección
Del repertorio a la acción del paso
Elegir es aplicar prioridades en orden, sin ambigüedad:
- 1Listar el repertorio.
Descansar, comer, vagar: pocas acciones con nombre claro.
- 2Ordenar por prioridad.
Si puede comer, come; si está lleno, descansa; si no, vaga.
- 3Ejecutar una sola.
Un agente, un paso, una acción: así el modelo es legible y comparable.
05 · Representación en Python
Cada acción es un método, elegir es un if
El repertorio se lee mejor como métodos con nombres de verbo. La selección es una cascada de condiciones con prioridades explícitas.
Python en tu navegador. Cambiá la energía o la distancia a la comida y observá cómo cambia la acción elegida.
class Agente:
def __init__(self, energia=8):
self.energia = energia
def descansar(self):
self.energia = min(20, self.energia + 1)
return "descansar"
def comer(self):
self.energia = min(20, self.energia + 4)
return "comer"
def vagar(self):
self.energia -= 1
return "vagar"
def comportarse(self, ve_comida):
if ve_comida:
return self.comer()
if self.energia > 15:
return self.descansar()
return self.vagar()
yo = Agente(energia=16)
print(yo.comportarse(ve_comida=False))
print(yo.comportarse(ve_comida=True), yo.energia)
Con energía 16 y sin comida descansa; con comida a la vista come aunque esté lleno: la oportunidad manda.
Medir el comportamiento colectivo
Un paso no dice nada; cien pasos con 40 agentes muestran el reparto del repertorio.
import random
random.seed(5)
pob = [Agente(energia=random.randint(5, 18)) for _ in range(40)]
conteo = {"descansar": 0, "comer": 0, "vagar": 0}
for a in pob:
ve = random.random() < 0.3
conteo[a.comportarse(ve_comida=ve)] += 1
print(conteo)
06 · Exploración
Laboratorio: vagar, comer o descansar
Cada agente aplica la misma prioridad: si ve comida cerca come (amarillo), si está lleno descansa (gris), si no vaga (azul). Movete los controles y observá cómo el entorno cambia el reparto sin cambiar la regla.
Repertorio en un mundo con comida
comer > descansar > vagar
Con 45 comidas, parte del grupo come y el resto vaga.
Amarillo come, azul vaga, gris descansa. Los puntos amarillos pequeños son comida. La misma regla produce otro reparto si cambia la comida o la energía.
Preguntas para explorar
- Poné comida en 0. ¿Qué comportamientos sobreviven? ¿Por qué descansar depende de la energía y no del entorno?
- Subí la energía inicial a 18 con comida 45. ¿Aumenta comer o descansar? ¿Qué nos dice sobre prioridades?
- Achicá el radio de vista al mínimo con mucha comida. ¿Los agentes comen más o menos? ¿Ven el mundo o solo sus cercanías?
Ver respuestas sugeridas
- Solo vagar y descansar: sin comida nadie puede comer. Descansar mira el estado interno, no el entorno: por eso sigue ocurriendo en un desierto.
- Aumenta descansar: con energía alta la segunda prioridad se dispara antes de vagar. Las prioridades ordenan el repertorio.
- Comen menos aunque haya comida: la comida lejana es invisible. El comportamiento depende del mundo percibido, no del real.
07 · Comprensión
Confusiones frecuentes
«Comportamiento es lo mismo que regla»
La regla decide; el comportamiento es lo decidido y ejecutado. La regla es el if, el comportamiento es el verbo que se observa.
«El agente puede hacer todo a la vez»
Comer y descansar a la vez traba la contabilidad de energía y tiempo. Una acción por paso mantiene el modelo auditable.
«Sin costo no pasa nada»
Sin costo vagar es gratis y descansar inútil: el reparto se vuelve arbitrario. El costo diferencia las acciones.
«Más acciones es más inteligente»
Más acciones exigen más condiciones y más parámetros. La inteligencia del modelo está en 2–3 acciones bien elegidas.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: ejecutar una acción
Ejecutá y verificá el efecto sobre la energía. Luego hacé descansar dos veces seguidas.
class Agente:
def __init__(self, energia=8):
self.energia = energia
def vagar(self):
self.energia -= 1
return "vagar"
def descansar(self):
self.energia = min(20, self.energia + 1)
return "descansar"
a = Agente(8)
print(a.vagar(), a.energia)
Ver solución razonada
Vagar deja energía en 7. Dos descansos desde 7 la llevan a 9: cada acción tiene firma energética distinta.
Ejercicio 2: predecir la elección
Sin ejecutar primero: con energía 16 y sin comida, ¿qué elige este agente? Comprobalo después.
class Agente:
def __init__(self, energia):
self.energia = energia
def comportarse(self, ve_comida):
if ve_comida:
return "comer"
if self.energia > 15:
return "descansar"
return "vagar"
print(Agente(16).comportarse(False))
Ver solución
Elige descansar: la primera condición falla y la segunda se cumple. El orden de los if es la prioridad.
Ejercicio 3: contar el repertorio
Simulá 100 decisiones con 30 % de avistajes y contá el reparto. Cambiá la energía a 18 y compará.
Ver una posible respuesta
import random
random.seed(6)
def eleccion(energia, ve):
if ve:
return "comer"
return "descansar" if energia > 15 else "vagar"
for energia in [8, 18]:
c = {"comer": 0, "descansar": 0, "vagar": 0}
for _ in range(100):
c[eleccion(energia, random.random() < 0.3)] += 1
print(energia, c)
Con 8 domina vagar; con 18 domina descansar; comer ronda el 30 % en ambos: la oportunidad de comer es independiente del estado.
09 · Síntesis
Ideas para recordar
- El comportamiento es el repertorio observable: moverse, transformarse, afectar a otros.
- Cada acción declara condición, costo y efecto.
- La selección ordena prioridades y ejecuta una sola acción por paso.
- En Python, cada acción es un método que devuelve su nombre.
- El mismo repertorio produce otro reparto si cambia el entorno o la energía.
En el próximo tema estudiaremos las reglas de decisión: cómo escribir esos si-entonces sin ambigüedad.