01 · Punto de partida
Ver no alcanza si no te movés
En el Tema 11 el agente filtraba el mundo desde donde estaba parado. Pero su ventana se mueve con su cuerpo: para ver otra cosa hay que girar, para cruzarse con otros hay que caminar, para encontrar comida hay que buscar. El movimiento es lo que convierte posiciones en historias.
Y todo movimiento es una apuesta: cada paso gasta energía, abandona lo conocido y crea los encuentros del Tema 9, los avisos del Tema 10 y lo percibido del Tema 11. Sin paso no hay mezcla; con pasos gigantes no hay detalle.
- ¿Cuánto avanza por paso y hacia dónde?
- ¿Cuándo gira: al azar, por lo que ve o por lo que recuerda?
- ¿Busca al azar o sigue una pista?
- ¿Qué pasa al chocar con bordes y obstáculos?
02 · Definición
Paso, rumbo y búsqueda
Todo desplazamiento combina cuánto, hacia dónde y con qué lógica:
Paso
Cuánto avanza por vez: corto y detallado o largo y salteado. El paso grande cubre más pero pisa menos.
Rumbo
Hacia dónde apunta: sigue derecho, gira al azar o corrige hacia un objetivo. El giro crea o deshace filas.
Búsqueda
Con qué lógica explora: azar puro, seguir gradientes o volver a lo que funcionó. Buscar es moverse con memoria.
| Mundo | Paso y rumbo | Búsqueda típica |
|---|---|---|
| Forrajeo | pasos cortos con giros | olfatear y quedarse donde hay pasto |
| Multitud | paso de peatón a la salida | seguir al de adelante y esquivar |
| Tráfico | avance por carril | frenar si el de adelante frena |
| Epidemia | mezcla por caminata | más pasos, más contactos por ronda |
03 · Formas
Azar que mezcla frente a rumbo que dirige
El azar cubre sin apuntar; el rumbo apunta pero puede encerrar. El modelo declara cuánto de cada uno.
Caminata aleatoria
Difusión sin mapa
Cada paso gira al azar: rumbo += azar(-a, a). Mezcla bien, cubre parejo y no necesita sensores. Ideal para explorar desde cero.
Movimiento dirigido
Sesgo hacia algo
Gira hacia comida, salida o vecino: rumbo → objetivo. Llega rápido pero se apelotona y choca si todos quieren lo mismo.
- Paso
- Distancia por avance: si es mayor que el radio de percepción, el agente salta sin ver lo intermedio.
- Rumbo
- Dirección en radianes que se actualiza con giros. Seguir derecho conserva filas; girar mucho dispersa.
- Velocidad
- Pasos por unidad de tiempo o tamaño de paso por ronda. Más velocidad es más mezcla y más choques.
- Sesgo
- Componente dirigida del giro: cuánto del rumbo mira al objetivo y cuánto tiembla al azar.
04 · Ciclo
El paso que gira y avanza
Cada agente actualiza su rumbo antes de moverse, en este orden:
- 1Percibir lo cercano.
Leer vecinos, comida o muros con la ventana del Tema 11.
- 2Girar el rumbo.
Sumar azar, corregir hacia el objetivo o mantener la marcha según la regla.
- 3Avanzar y limitar.
Sumar paso por dirección y aplicar el borde del entorno (Tema 7).
05 · Representación en Python
Girar con azar y avanzar con borde
El agente guarda posición y rumbo. Girar es sumar un tiembla; avanzar es trigonometría con tope en [0, 1].
Python en tu navegador. Cambiá el paso y observá si el agente explora o se queda dando vueltas.
import math, random
class Agente:
def __init__(self, x=0.5, y=0.5, rumbo=0.0):
self.x = x
self.y = y
self.rumbo = rumbo
def girar(self, tiembla=0.5):
self.rumbo += random.uniform(-tiembla, tiembla)
return self.rumbo
def avanzar(self, paso=0.03):
self.x = min(1.0, max(0.0, self.x + paso * math.cos(self.rumbo)))
self.y = min(1.0, max(0.0, self.y + paso * math.sin(self.rumbo)))
return (self.x, self.y)
a = Agente()
print(a.girar(tiembla=0.5))
print(a.avanzar(paso=0.03))
Con paso 0,03 hacen falta ~30 avances para cruzar el mapa: el paso chico detalla, el grande mezcla.
Girar hacia un objetivo
El sesgo corrige el rumbo hacia comida o salida; el azar evita filas perfectas.
def girar_hacia(ag, ox, oy, sesgo=0.7, tiembla=0.3):
objetivo = math.atan2(oy - ag.y, ox - ag.x)
dif = (objetivo - ag.rumbo + math.pi) % (2 * math.pi) - math.pi
ag.rumbo += sesgo * dif + random.uniform(-tiembla, tiembla)
return ag.rumbo
a = Agente(0.2, 0.2, rumbo=0.0)
print(girar_hacia(a, 0.9, 0.9))
print(a.avanzar(paso=0.05))
06 · Exploración
Laboratorio: pasos que cubren el mapa
Los agentes caminan al azar con el mismo paso durante T rondas. El mapa se divide en 16 cuadrantes: ¿cuántos se pisan? Compará paso corto contra paso largo con la misma cantidad de rondas.
Caminar es mezclar
pos += paso · dirección(rumbo + azar)
Con 40 agentes y paso 0,03, la cobertura es parcial.
Cada punto es un agente y la cruz marca su punto de partida. La grilla divide el mapa en 16 cuadrantes: iluminado fue pisado. Pulsá Nueva réplica para otra caminata con los mismos parámetros.
Preguntas para explorar
- Con 0 rondas, ¿cuánta cobertura hay? ¿Por qué sin pasos no hay mezcla aunque haya muchos agentes?
- Con paso mínimo y 200 rondas frente a paso máximo y 20 rondas, ¿quién cubre más? ¿Qué enseña sobre paso y tiempo?
- Repetí la misma configuración 3 veces. ¿La cobertura es idéntica? ¿Qué parte es regla y qué parte es azar de giros?
Ver respuestas sugeridas
- Solo la inicial: sin avanzar nadie pisa cuadrantes nuevos. La mezcla la crean los pasos, no la cantidad quieta.
- Suele ganar el paso grande con pocas rondas para cobertura, pero detalla menos: el paso chico pisa fino y el grande saltea. Cobertura no es precisión.
- No: los giros azarosos arman rutas distintas. La regla (girar ±, avanzar paso) es fija; la historia de rumbos no.
07 · Comprensión
Confusiones frecuentes
«Moverse es cambiar x e y»
Cambiar coordenadas sin rumbo ni borde es teletransportar. Moverse es girar el rumbo y avanzar el paso con límites del mundo.
«Más paso siempre encuentra antes»
Más paso cubre más pero saltea comida, encuentros y mensajes intermedios. En forrajeo el paso gigante pasa al lado sin ver.
«Girar al azar es no tener regla»
El azar acotado es una regla de búsqueda: tiembla declarado, con rango y semilla. Distinto es girar sin rango ni registro.
«El borde frena la búsqueda»
El borde la condiciona (Tema 7): con muros los pasos se acumulan en esquinas y la cobertura miente. El borde se declara y se prueba.
08 · Práctica guiada
Ejercicios con Python
Ejercicio 1: avanzar con borde
Ejecutá y verificá dónde termina. Luego probá con paso 0,5 y observá por qué el borde es parte del movimiento.
import math
x, y, rumbo, paso = 0.95, 0.5, 0.0, 0.1
x = min(1.0, max(0.0, x + paso * math.cos(rumbo)))
y = min(1.0, max(0.0, y + paso * math.sin(rumbo)))
print(x, y)
Ver solución razonada
Da 1.0, 0.5: quería llegar a 1,05 pero el muro lo frena. Sin ese tope el agente saldría del mundo sin aviso.
Ejercicio 2: predecir la deriva
Sin ejecutar primero: rumbo 0 (este) con tiembla ±0,1 durante 3 pasos de 0,05. ¿Avanza más en x o en y? Comprobalo después.
import math, random
random.seed(2)
x = y = 0.5
rumbo = 0.0
for _ in range(3):
rumbo += random.uniform(-0.1, 0.1)
x += 0.05 * math.cos(rumbo)
y += 0.05 * math.sin(rumbo)
print(round(x, 3), round(y, 3))
Ver solución
Avanza más en x: el rumbo mira al este y el tiembla es chico. El azar mueve, el rumbo manda.
Ejercicio 3: paso que saltea comida
Comida en 0,55 y agente en 0,5 mirando al este. ¿La pisa con paso 0,03? ¿Y con paso 0,10?
Ver una posible respuesta
for paso in [0.03, 0.10]:
x = 0.5 + paso
print(paso, abs(x - 0.55) < 0.02)
Con 0,03 cae a 0,53 y la huele; con 0,10 cae a 0,60 y la salta. El paso grande cubre pero no detalla.
09 · Síntesis
Ideas para recordar
- Moverse es percibir, girar y avanzar: el rumbo se actualiza antes del paso.
- El paso calibra mezcla contra detalle: chico detalla, grande cubre y saltea.
- La caminata aleatoria mezcla sin sensores; el sesgo dirige pero apelotona.
- El borde y el radio mandan: sin límites el paso teletransporta encuentros.
- En Python, girar suma azar o sesgo y avanzar es paso por dirección con tope.
En el próximo tema estudiaremos los vecindarios: quiénes son vecinos y cómo se definen.