Simulación Basada en Agentes · Tema 13

Vecindarios

Quiénes son vecinos y cómo se definen: el recorte que decide a quién escucha, copia o esquiva cada agente.

01 · Punto de partida

Moverse mezcla, el vecindario filtra

En el Tema 12 los agentes caminaban y se cruzaban. Pero ¿todos los que están cerca cuentan igual? ¿Y los lejos conectados por amistad, jerarquía o mercado? El vecindario es la lista corta de otros que este agente toma en cuenta en este paso.

Esa lista manda en todo lo anterior: a quién percibo (Tema 11), con quién me encuentro (Tema 9), a quién escucho (Tema 10). Cambiar la definición de vecino cambia el modelo sin tocar ninguna regla.

  • ¿Vecino es el que está cerca o el que está conectado?
  • ¿Cuántos vecinos como máximo y a qué distancia?
  • ¿La relación es mutua o dirigida?
  • ¿El vecindario cambia cuando se mueven o es fijo?

02 · Definición

Distancia, red y celda

Tres criterios cubren casi todos los modelos del curso, del mapa al grafo:

◎

Por distancia

Métrico: vecinos los que están a menos del radio. Se mueve con el cuerpo y se recalcula cada paso.

⛉

Por red

Topológico: vecinos los conectados por amistad, equipo o mercado, aunque estén lejos. La red persiste.

▦

Por celda

Celular: vecinos las casillas linderas (Moore 8, von Neumann 4). Fijo, barato y perfecto para rejillas (Tema 14).

El mismo recorte en cada dominio.
MundoCriterioVecinos típicos
Multituddistancia < 2 mcuerpos que empujan y frenan
Opinionesred de amistadcontactos que influyen aunque lejos
Juego de la Vidacelda Moore8 casillas linderas, ni una más
Mercadored + distanciavendedores cercanos y conocidos

03 · Tipos

Métrico que respira frente a topológico que persiste

El métrico cambia a cada paso con el movimiento; el topológico aguanta aunque se alejen. Muchos modelos combinan ambos con un tope.

Vecindario métrico

Los de alrededor

Todos dentro del radio: si dist < r → vecino. Simple y realista en multitudes, pero el costo crece con la densidad y hay que recalcularlo.

Vecindario topológico

Los k más cercanos

Los k conectados aunque el radio cambie: bandadas que siguen a 7 vecinos fijos. Estable y barato, pero ignora amontonamientos.

Vecindario
Lista de otros que el agente considera en este paso. Todo lo que no está en la lista no existe para la regla.
Grado
Cantidad de vecinos de un agente. El grado medio mide cuán conectada está la población.
Moore / von Neumann
En rejilla: Moore son 8 linderas con diagonales; von Neumann son 4 ortogonales. Base de autómatas (Temas 27–28).
Dirigido
Relación no mutua: a escucha a b pero b no escucha a a. Seguidores, jerarquías y contagios asimétricos.

04 · Ciclo

El paso con lista corta

Cada paso reconstruye vecindarios antes de decidir, en este orden:

listar→filtrar→usar
  1. 1
    Listar candidatos.

    Todos los agentes o celdas que podrían contar, según espacio o red.

  2. 2
    Filtrar por criterio.

    Aplicar radio, k más cercanos o celda, con tope y sin duplicar (i < j si es mutuo).

  3. 3
    Usar solo vecinos.

    Percepción, encuentro y comunicación (Temas 9–11) leen esa lista corta.

05 · Representación en Python

Vecinos por radio y por k cercanos

El mundo guarda posiciones; cada agente pide su lista. Por radio devuelve todos los cercanos; por k devuelve los más próximos con tope.

Python en tu navegador. Cambiá el radio y el tope k y observá cómo se achica la lista.

import math

pos = [(0.2, 0.2), (0.25, 0.22), (0.9, 0.9), (0.3, 0.25)]

def vecinos_radio(i, radio=0.15):
    xi, yi = pos[i]
    return [j for j, (x, y) in enumerate(pos)
            if j != i and math.hypot(x - xi, y - yi) < radio]

print(vecinos_radio(0))

Con radio 0,15, el agente 0 ve a 1 y 3 pero no a 2: el lejano queda fuera aunque exista.

Tope k para no saturarse

En multitudes densas el radio devuelve cientos; el tope k se queda con los más cercanos.

def vecinos_k(i, radio=0.3, k=2):
    xi, yi = pos[i]
    cand = []
    for j, (x, y) in enumerate(pos):
        if j == i:
            continue
        d = math.hypot(x - xi, y - yi)
        if d < radio:
            cand.append((d, j))
    cand.sort()
    return [j for _, j in cand[:k]]

print(vecinos_k(0, radio=0.3, k=2))

06 · Exploración

Laboratorio: radio que conecta, tope que recorta

Los agentes están quietos: solo cambia la red. Cada uno conecta con sus vecinos dentro del radio, hasta un tope k de más cercanos. Las líneas son vínculos; los grises están aislados. ¿Cuánto radio hace falta para que nadie quede solo?

EXPERIMENTO 13

El criterio dibuja la red

vecino si dist < radio, hasta k

Los resultados numéricos aparecen debajo.
Enlaces0
Grado medio0,0
Aislados0
LecturaFragmentada

Con 40 agentes y radio 0,20, la red está fragmentada.

Cada punto es un agente fijo y cada línea un vínculo de vecindario. Los puntos apagados no tienen vecinos con este criterio. Pulsá Nueva réplica para otra disposición con los mismos parámetros.

Preguntas para explorar

  1. Con radio mínimo, ¿cuántos aislados hay? ¿Por qué sin alcance no hay vecindario aunque haya multitud?
  2. Subí el radio al máximo con k = 1. ¿El grado medio se dispara o lo frena el tope? ¿Qué red dibuja?
  3. Duplicá los agentes sin tocar radio ni k. ¿Suben los enlaces? ¿Qué dice eso de densidad contra atención?
Ver respuestas sugeridas
  1. Casi todos: sin radio que los alcance no hay candidatos. El vecindario métrico exige coincidir en espacio.
  2. Lo frena el tope: cada uno mira a un solo cercano y la red se vuelve cadena fragmentada. Radio grande con k chico da red rala pero barata.
  3. Sí hasta saturar k: más densidad da más candidatos, pero cada agente atiende hasta k. La densidad crea oferta, el tope pone el límite.

07 · Comprensión

Confusiones frecuentes

«Vecino es el que está cerca»

Solo en el criterio métrico. En red el vecino puede estar lejos y en celda el vecino es la casilla lindera aunque esté vacía. El criterio se declara.

«Más vecinos siempre informan mejor»

Más vecinos es más cómputo y más ruido: promediar cientos borra lo local. El tope k protege la localidad y la escala.

«Si a es vecino de b, b es vecino de a»

Solo si el vínculo es mutuo. Con k cercanos o jerarquías la relación es dirigida: a atiende a b pero b atiende a otros.

«El vecindario se calcula una vez»

Solo si nadie se mueve y la red es fija. Con movimiento el métrico se recalcula cada paso; si no, cada agente vive en el pasado.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: listar por radio

Ejecutá y verificá quiénes son vecinos del 0. Luego bajá el radio a 0,05 y comprobá que se queda solo.

import math
pos = [(0.2, 0.2), (0.25, 0.22), (0.9, 0.9)]
xi, yi = pos[0]
radio = 0.1
print([j for j, (x, y) in enumerate(pos) if j != 0 and math.hypot(x - xi, y - yi) < radio])
Ver solución razonada

Da [1]: solo el segundo está a ~0,05. Con radio 0,05 el límite es estricto y puede quedar []: aislado por criterio.

Ejercicio 2: predecir el tope

Sin ejecutar primero: 5 candidatos en radio y k = 2. ¿Cuántos vecinos devuelve? ¿Importa el orden?

cand = [(0.20, 4), (0.05, 1), (0.12, 2), (0.08, 3), (0.15, 0)]
cand.sort()
print([j for _, j in cand[:2]])
Ver solución

Devuelve 2 vecinos: [1, 3], los más cercanos. El orden por distancia decide quién entra con k chico.

Ejercicio 3: Moore contra von Neumann

En rejilla, celda (1,1). ¿Cuántos vecinos Moore y cuántos von Neumann? Escribí ambas listas.

Ver una posible respuesta
moore = [(0,0),(0,1),(0,2),(1,0),(1,2),(2,0),(2,1),(2,2)]
neumann = [(0,1),(1,0),(1,2),(2,1)]
print(len(moore), len(neumann))

Da 8, 4: Moore suma diagonales, von Neumann no. Elegir uno cambia contagios y difusiones en rejilla (Temas 14 y 27).

09 · Síntesis

Ideas para recordar

  • El vecindario es la lista corta que la regla sí ve: distancia, red o celda.
  • Métrico respira con el movimiento; topológico persiste por conexión; celular fija la rejilla.
  • Radio pone alcance y k pone atención: juntos dan red local y escalable.
  • El vínculo puede ser dirigido: atender no siempre es mutuo.
  • En Python, vecinos es filtrar por criterio y ordenar por distancia antes del tope.

En el próximo tema estudiaremos los espacios discretos: rejillas, celdas y mundos por casillas.