01 · Punto de partida
Nadie ve el mapa entero
En los Temas 9 y 10 los agentes se encontraban y se avisaban. Pero ¿cómo sabe cada uno qué hay cerca? Ningún peatón ve toda la plaza, ningún conductor ve toda la autopista, ninguna hormiga huele todo el hormiguero. Cada agente decide con una ventana recortada del mundo.
Esa ventana es la percepción: el filtro entre lo que hay y lo que el agente cree que hay. Si la ventana es generosa, el modelo se vuelve omnisciente; si es estrecha, aparecen errores, demoras y sorpresas que explican el fenómeno real.
- ¿Hasta qué distancia llega a ver?
- ¿En qué dirección mira y qué queda a su espalda?
- ¿Qué lo tapa o lo confunde: muros, multitud, ruido?
- ¿Recuerda lo que vio o solo existe el presente?
02 · Definición
Alcance, campo y resolución
Toda ventana sensorial combina tres recortes, del más obvio al más traicionero:
Alcance
Hasta dónde llega: radio de visión, oído o olfato. Más allá del radio, el mundo no existe para el agente.
Campo
Hacia dónde mira: cono frontal de 90°, visión trasera nula, radar de 360°. La espalda es un punto ciego.
Resolución
Con qué nitidez: oclusión tras muros, confusión en multitud, ruido que inventa o borra vecinos.
| Mundo | Alcance | Campo y filtro |
|---|---|---|
| Peatón | 5 m nítidos | cono frontal; la espalda no existe |
| Conductor | 100 m en ruta | frontal más espejos; el camión tapa |
| Hormiga | feromona cercana | olfato en 360° con ruido alto |
| Mercado | tablón visible | solo precios publicados, no costos ajenos |
03 · Límites
Perfecta y global frente a limitada y local
La tentación es darle al agente el mapa entero porque es gratis en código. El costo es científico: el modelo deja de explicar cómo se las arreglan los que no ven todo.
Percepción perfecta
Ojos de dron
Ve posiciones exactas de todos en cada paso: percibidos = todos. Sirve para depurar, pero crea coordinación imposible en la realidad.
Percepción limitada
Ojos de peatón
Ve pocos, de frente y con errores: si dist < radio y de frente → cuenta. Explica filas, choques y rumores lentos.
- Radio de percepción
- Distancia máxima que el sensor cubre. Fuera del círculo no hay registro, aunque haya multitud.
- Cono de visión
- Ángulo alrededor de la dirección de mirada que cuenta: 90° peatón, 360° radar. Define la espalda ciega.
- Oclusión
- Bloqueo por muros o cuerpos: lo que está detrás no se ve aunque esté cerca. Requiere chequear línea de vista.
- Memoria
- Lo percibido que se guarda: el agente recuerda dónde vio comida aunque ya no la vea. Sin memoria solo existe el presente.
04 · Ciclo
El paso con ventana propia
Cada agente filtra antes de decidir, en este orden:
- 1Ubicarse.
Posición y dirección de mirada de este paso: el cono se mueve con el cuerpo.
- 2Filtrar candidatos.
Quedarse solo con lo que cumple distancia, ángulo y línea de vista; el resto se descarta.
- 3Decidir sobre lo percibido.
La regla si-entonces (Tema 6) lee la lista filtrada, nunca el mapa entero.
05 · Representación en Python
Ver es filtrar por distancia y ángulo
El agente guarda posición y hacia dónde mira en radianes. Ver a otro exige dos condiciones: estar cerca y estar de frente.
Python en tu navegador. Cambiá el ángulo del cono y observá quién entra y quién queda a tu espalda.
import math
class Agente:
def __init__(self, x, y, angulo=0.0):
self.x = x
self.y = y
self.angulo = angulo # 0 = este, en radianes
def ve_a(obs, otro, radio=0.3, campo=math.pi / 2):
dx, dy = otro.x - obs.x, otro.y - obs.y
if math.hypot(dx, dy) > radio or math.hypot(dx, dy) == 0:
return False
dir_a = math.atan2(dy, dx)
dif = (dir_a - obs.angulo + math.pi) % (2 * math.pi) - math.pi
return abs(dif) <= campo / 2
yo = Agente(0.5, 0.5, angulo=0.0)
frente = Agente(0.7, 0.5)
espalda = Agente(0.3, 0.5)
print(ve_a(yo, frente), ve_a(yo, espalda))
Con radio 0,3 y campo 90°, el de adelante se ve (True) y el de atrás no (False): misma distancia, otro campo.
Contar solo lo percibido
La regla cuenta vecinos sobre la lista filtrada, no sobre el mundo.
yo = Agente(0.5, 0.5, angulo=0.0)
otros = [Agente(0.7, 0.5), Agente(0.3, 0.5), Agente(0.6, 0.55)]
percibidos = [o for o in otros if ve_a(yo, o, radio=0.3, campo=math.pi / 2)]
print(len(percibidos))
06 · Exploración
Laboratorio: el cono que recorta el mundo
El agente blanco del centro mira al este. Su cono amarillo es lo único que cuenta: verde intenso lo percibido, verde apagado lo ignorado. Ajustá radio y campo y observá cuántos desaparecen por estar lejos o a tu espalda.
La ventana decide por vos
veo si cerca y de frente
Con radio 0,30 y campo 90°, la ventana recorta el mundo.
El círculo es el alcance y el sector amarillo el campo de visión mirando al este. Los puntos brillantes están percibidos; los apagados están lejos, detrás o tapados por la dirección. Pulsá Nueva réplica para otra disposición.
Preguntas para explorar
- Con campo 360° y radio chico, ¿qué limita: la espalda o la distancia? ¿Y con radio grande y campo 30°?
- Duplicá los agentes sin tocar radio ni campo. ¿Los percibidos se duplican? ¿Qué dice eso de densidad y ventana?
- Si el agente girara 180°, ¿vería a los mismos? ¿Qué cambia cuando el cono se mueve con el cuerpo?
Ver respuestas sugeridas
- Con 360° no hay espalda: limita la distancia. Con 30° sobra alcance: la mayoría queda fuera del cono aunque esté cerca.
- Casi: el doble de candidatos en la misma ventana da el doble de percibidos en promedio. La ventana fija convierte densidad en información.
- No: la espalda se vuelve frente. El que percibe desde donde mira obliga a modelar giros y búsqueda (Tema 12).
07 · Comprensión
Confusiones frecuentes
«Percibir es copiar el mapa»
Copiar es hacer trampa con ojos de dron. Percibir es filtrar por radio, campo y oclusión y entregar una lista corta y sesgada.
«Más radio siempre es mejor»
Más radio es más cómputo y menos realismo: el peatón no cuenta cabezas a 200 m. El radio se justifica con el fenómeno, no con la comodidad.
«La espalda no importa si hay muchos»
La espalda crea asimetrías que explican filas, choques por alcance y rumores lentos. Con 360° esos patrones se evaporan.
«Percibir y recordar es lo mismo»
Percibir es el presente filtrado; recordar es guardar pasados para cuando ya no se ven. Sin memoria el agente olvida al girar.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: cerca pero detrás
Ejecutá y verificá quién se ve. Luego girá al observador al oeste (ángulo = pi) y comprobá que se invierte.
import math
def ve_a(ox, oy, ang, px, py, radio=0.3, campo=math.pi / 2):
d = math.hypot(px - ox, py - oy)
if d > radio or d == 0:
return False
dif = (math.atan2(py - oy, px - ox) - ang + math.pi) % (2 * math.pi) - math.pi
return abs(dif) <= campo / 2
print(ve_a(0.5, 0.5, 0.0, 0.7, 0.5), ve_a(0.5, 0.5, 0.0, 0.3, 0.5))
Ver solución razonada
Da True, False: misma distancia, distinto ángulo. Con ang = pi da False, True: la ventana gira con el cuerpo.
Ejercicio 2: predecir el conteo
Sin ejecutar primero: observador al centro mirando al este, radio 0,3, campo 90°. Puntos en (0.7,0.5), (0.5,0.8), (0.6,0.55). ¿Cuántos percibe?
import math
pts = [(0.7, 0.5), (0.5, 0.8), (0.6, 0.55)]
n = sum(1 for x, y in pts if ve_a(0.5, 0.5, 0.0, x, y))
print(n)
Ver solución
Percibe 2: el del este y el del noreste suave. El del norte está a 90° de la mirada y queda fuera del cono de 90° (±45°).
Ejercicio 3: memoria de una ronda
El agente vio comida en (0.8, 0.8) y luego giró. ¿Cómo evita olvidarla? Guardala y usala aunque ya no la vea.
Ver una posible respuesta
memoria = (0.8, 0.8)
veo_ahora = False
objetivo = (0.8, 0.8) if veo_ahora else memoria
print(objetivo)
Imprime (0.8, 0.8) desde la memoria: percibir es presente, recordar es pasado útil. Sin esa línea el giro borra el plan.
09 · Síntesis
Ideas para recordar
- La percepción filtra el mundo por alcance, campo y resolución: la regla ve lo percibido.
- El cono se mueve con el cuerpo: la espalda ciega explica choques y demoras reales.
- La ventana perfecta y global es un jefe encubierto: siempre se declara y se limita.
- Más densidad con la misma ventana da más información: la ventana convierte mapa en muestra.
- En Python, ver es distancia más ángulo y decidir es contar solo la lista filtrada.
En el próximo tema estudiaremos el movimiento: desplazamiento, giros y búsqueda en el espacio.