Simulación Basada en Agentes · Tema 32

Modelos epidemiológicos

Contagios persona a persona: contactos que contagian y días que curan.

01 · Punto de partida

El fuego que camina

En el Tema 31 el bosque ardía quieto. Ahora los árboles caminan: cada persona se mueve, se cruza y contagia con probabilidad p, enferma D días y queda inmune. El contagio persona a persona une movimiento (Tema 12), encuentros (Tema 9) y red (Tema 13) en un SIR con cuerpos.

Por eso el agente supera a la ecuación: cuarentenas que quitan movilidad, superpropagadores con muchos contactos y barrios que se cuidan distinto no entran en mezcla perfecta.

  • ¿Qué contacto cuenta: distancia y duración?
  • ¿Qué probabilidad p por contacto?
  • ¿Cuántos días contagia antes de curarse?
  • ¿Quién se mueve y quién se queda quieto?

02 · Definición

Contacto, contagio y curso

Todo SIR con cuerpos combina encuentro, suerte y calendario:

◎

Contacto

Coincidir en radio esta ronda: el canal del Tema 9. Sin contacto no hay sorteo.

🎲

Contagio

Sortear p por contacto: cada par sano–infectado juega. Más contactos, más sorteos.

📅

Curso

D días infectado y luego inmune: el reloj que apaga frentes. Sin curso es rumor eterno.

El mismo SIR en cada dominio.
MundoContactoCurso típico
Gripecercanía sostenidadías infectado, luego inmune
Rumor con olvidocharla con creyentedías creyente, luego escéptico
Computadorasred con infectadaparche tras días vulnerable
Boca en bocavecino adoptadosin cura: adopta para siempre

03 · Ecuación y agentes

Mezcla perfecta frente a personas con mapa

La ecuación supone que cualquiera toca a cualquiera; el agente toca a sus vecinos si se mueve.

SIR agregado

Mezcla perfecta

Tasas sobre totales: dI = b·S·I − g·I. Rápido y elegante, pero sin mapa, red ni cuarentenas.

SIR con agentes

Personas que se cruzan

Sorteos por par cercano: si dist < r y azar < p → contagia. Lento y ruidoso, pero con cuarentena y hubs.

SIR
Sano, Infectado y Recuperado inmune. Sin births ni muertes en este modelo: N fijo que cambia de letra.
R0
Contagios que causa un infectado en ingenuos: contactos × p × D. Arriba de 1 despega, abajo muere.
Período infeccioso
Días D que contagia antes de curar. Largo alarga frentes; corto los apaga.
Cuarentena
Movilidad a cero o radio chico: quita contactos sin tocar p ni D. Palanca local del modelo.

04 · Ciclo

La ronda que mueve, contagia y cura

Cada día mueve a todos, contagia pares y envejece infectados, en este orden síncrono:

mover→contagiar→curar
  1. 1
    Mover a todos.

    Caminata con paso de movilidad y muros: los cruces crean contactos.

  2. 2
    Contagiar pares.

    Listar sanos con infectados a menos de r y sortear p una vez por par.

  3. 3
    Curar por días.

    Sumar 1 a infectados y pasar a R a los que cumplen D: inmunes que frenan.

05 · Representación en Python

Estados con días que cuentan

Cada agente guarda letra y días infectado. Contagiar es sorteo por par; curar es calendario.

Python en tu navegador. Subí p y observá cómo el mismo contacto pasa de amague a ola.

import random
def contagia(p=0.3):
    return random.random() < p

print(contagia(0.0), contagia(1.0))

Con p 0 nunca y con 1 siempre: la probabilidad calibra el canal persona a persona.

Curar por calendario

Infectado suma días y a los D pasa a inmune sin sorteo.

def curar(dias, D=7):
    return "R" if dias + 1 >= D else "I"

print(curar(6), curar(2))

06 · Exploración

Laboratorio: cuarentena contra contagio

Los agentes caminan con movilidad (paso por día) y contagian a menos de 0,12 con probabilidad p. Infectados curan en 10 días a inmunes grises. Empieza 1 infectado y corren 80 días. Verde sano, rojo infectado, gris inmune. ¿Cuánta movilidad hace falta para que prenda?

EXPERIMENTO 32

Personas que se cruzan

S + I → p → I → 10 días → R

Los resultados numéricos aparecen debajo.
Atacados0 %
Pico I0 %
Sanos0 %
LecturaChispa

Con p 0,30 y movilidad 0,05, la ola avanza.

Cada punto camina libre: el color es su letra SIR final tras 80 días. La movilidad 0 es cuarentena total. Pulsá Nueva réplica para otros cruces con los mismos parámetros.

Preguntas para explorar

  1. Con movilidad 0, ¿cuántos atacados hay? ¿Por qué sin cruces no hay epidemia aunque p sea alta?
  2. Con p = 0 y movilidad máxima, ¿prende? ¿Qué motor falta si sobra mezcla?
  3. Repetí 3 veces con p media y movilidad media. ¿El pico es idéntico? ¿Qué parte es sorteo de cruces?
Ver respuestas sugeridas
  1. Casi solo el inicial: sin moverse casi nadie contacta. El contacto es condición del sorteo.
  2. No: contactos sin contagio son paseos. Mezcla sin p no enferma.
  3. No: quién se cruza con quién arma olas distintas. La regla p–D es fija; la historia de encuentros no.

07 · Comprensión

Confusiones frecuentes

«R0 es destino»

R0 supone ingenuos mezclados: con red, cuarentena e inmunes el efectivo cae. R0 abre, no cierra.

«Más p siempre es peor»

Con movilidad 0 la p alta no toca a nadie. El daño lo firma el par contacto–contagio, no p sola.

«Curar es olvidar»

Curar es pasar a R inmune que frena frentes. Sin inmunes es rumor eterno (Tema 30), no SIR.

«Una corrida calibra»

Una corrida es una ola posible. La calibración promedia réplicas con semilla y reporta pico y ataque.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: sorteo por par

Ejecutá y verificá extremos. Luego probá p = 0,3 varias veces y observá el azar.

import random
random.seed(2)
def contagia(p): return random.random() < p
print(contagia(0.0), contagia(1.0), [contagia(0.3) for _ in range(5)])
Ver solución razonada

Extremos fijos y centro mezclado: p calibra suerte por par, no destino. Con p 0,3 unos contagian y otros no.

Ejercicio 2: predecir el R0

Sin ejecutar primero: 4 contactos por día, p = 0,25 y D = 8. ¿R0? Comprobalo después.

print(4 * 0.25 * 8)
Ver solución

Da 8,0: despega fuerte en mezcla perfecta. En red con cuarentena el efectivo será menor.

Ejercicio 3: cuarentena que corta

Si la movilidad cae a 0, ¿qué contactos quedan? Escribí la consecuencia en una línea.

Ver una posible respuesta
print("sin cruces no hay pares ni sorteos")

La cuarentena quita el canal antes que el sorteo: sin pares la p no juega. Palanca local del modelo.

09 · Síntesis

Ideas para recordar

  • SIR con cuerpos es mover, contagiar pares con p y curar a D días.
  • Contacto es condición y p es suerte: sin cruces no hay ola.
  • R0 abre con contactos × p × D; la red y la cuarentena lo bajan.
  • Inmunes frenan frentes: sin R es rumor, no epidemia.
  • En Python, sorteo por par más calendario de días con estados S/I/R.

En el próximo tema estudiaremos los modelos de tráfico: autos-agentes, frenos y embotellamientos.