Modelo de Epidemia en Scratch

Presento aquí una simulación muy elemental de propagación de una epidemia, que está desarrollada con fines didácticos, en el popular lenguaje de programación visual Scratch. La idea es ilustrar (a niños y no tan niños), el mecanismo básico por el que una epidemia se expande inicialmente de forma muy rápida ("crece exponencialmente"), por qué al pasar el tiempo el número de infectados sigue una curva en forma de campana, y por qué con el distanciamiento social se logra "aplanar la curva". Todos estos, conceptos que ya mencioné en algunas notas anteriores y que profundizaré y desarrollaré un poco más con ayuda de modelos analíticos en alguna nota posterior. En ese sentido esta simulación tiene cierto propósito divulgativo. Pero también tiene un propósito educativo. Es un proyecto con el que educadores de diferentes áreas pueden trabajar de forma interdisciplinaria (sobre todo en modalidad de educación a distancia): pensamiento computacional, interpretación de gráficas, propagación y prevención de enfermedades, etc. Trabajar en torno a un tema de actualidad como la pandemia de coronavirus, que concentra tanta atención y preocupación, puede utilizarse como motivador de aprendizajes, e incluso como forma de canalizar de modo constructivo ciertas ansiedades producto de esta situación social. Cabe aclarar que esta simulación no pretende ser un modelo predictivo de la propagación del COVID-19 ni de ninguna otra enfermedad. Es solo un modelo demostrativo de los principios básicos.




ASUNCIONES DEL MODELO

En este modelo "de juguete" las personas están representadas por puntos de color y el comportamiento se rige por las siguientes características:

1) La población se clasifica en tres grupos:
S) Susceptibles: son las personas sanas sin inmunidad contra la nueva enfermedad. (VERDE)
I) Infectados: son las personas enfermas, que son capaces de contagiar. (ROJO)
R) Recuperados: son las personas que se curaron y que han desarrollado inmunidad. (AZUL)

2) La población total no cambia durante el período que dura la epidemia.

3) Algunas personas se mueven de forma aleatoria y otras están fijas (en cuarentena). La cantidad de personas que se mueven y su velocidad depende del grado de distanciamiento social. Con leve distanciamiento social (0) son muchas las personas que se mueven con velocidades altas. Con gran distanciamiento social (9) son pocas las personas que se mueven y lo hacen con velocidades bajas.

4) Inicialmente toda la población es susceptible de contraer la enfermedad (No hay vacuna preventiva).

5) La enfermedad es introducida por una sola persona infectada (cuando inicia la simulación).

6) Las personas se infectan al primer contacto con alguien infectado.

7) La enfermedad no es letal. Las personas infectadas se curan (recuperan) al cabo de cierto tiempo. No hay tratamiento que lo acorte.

8) Las personas recuperadas generan inmunidad y por lo tanto no se vuelven a enfermar.




CÓMO USAR E INTERPRETAR EL SIMULADOR

1) Definir el tamaño de la población con el deslizador (entre 100 y 300).
2) Definir el grado de "distanciamiento social" con el deslizador (entre 0 y 9):
   0 = Vida normal, sin distanciamiento social.
   9 = distanciamiento social extremo.
3) Pulsar la bandera verde para iniciar la simulación.

Las tres gráficas que se van dibujando a medida que transcurre la simulación representan las cantidades de personas en cada grupo, según el mismo código de colores: Cantidad de personas susceptibles (verde), cantidad de infectados (rojo) y cantidad de recuperados (azul), siendo el eje horizontal el tiempo. Los valores respectivos de S, I y R, se muestran, a medida que evoluciona el sistema, en las variables de la esquina superior derecha de la pantalla.

Algunas observaciones que se pueden hacer al aumentar de distanciamiento social:
1) La curva roja se "achata", esto quiere decir que disminuye el número de infectados en el momento pico de la epidemia.
2) La curva roja tiende a extenderse más en el tiempo. El pico se demora un poco más.
3) La cantidad total de personas que se infectaron al terminar la epidemia es menor. Eso se puede comprobar mirando el número total de personas susceptibles, que representa la cantidad de personas que nunca se enfermaron.

Un ejemplo con bajo distanciamiento social: La curva de infectados crece muy rápido, el pico es alto, y al terminar la epidemia todas las personas contrajeron la enfermedad (0 susceptibles al final).



Un ejemplo con gran distanciamiento social: La curva de infectados crece más lentamente, el pico es más bajo, y al terminar la epidemia hay muchas personas que nunca contrajeron la enfermedad (57 susceptibles).




CÓMO FUNCIONA EL SIMULADOR


En este proyecto hay un personaje fundamental que representa a las personas, que es un círculo pequeño con tres disfraces diferentes: círculo verde, círculo rojo y círculo azul, denominados respectivamente: susceptible, infectado y recuperado.

Bloque 1:

El bloque 1 tiene 4 secciones:
 (1) Se inician las variables y el estado de las personas.
 (2) Se crean los clones de personas en posiciones aleatorias y con diferentes estados de cuarentena.
 (3) Se genera la persona infectada que será el vector que introduce la enfermedad en la población.
 (4) Se disparan los 480 ciclos que dura la simulación.

Sección 1:
La variable Población se establece mediante el deslizador respectivo y representa el número total de personas en el sistema.

Las variables Susceptibles, Infectados y Recuperados, contienen las cantidades de personas en cada grupo y se definen al inicio de tal modo que hay un solo infectado y todos los demás son susceptibles.

La variable Persona puede tomar tres valores: 'susceptible', 'infectado', 'recuperado'. Inicialmente se le asigna el valor 'susceptible', para que al generar los clones de personas, todos tengan ese estado.

De modo similar se establece el disfraz "susceptible" para que todas las personas tengan el mismo aspecto.

La variable Tiempo enfermo de cada persona se define inicialmente en cero y se va a ir incrementando en cada ciclo del programa en las personas con estado 'infectadao'.

Sección 2:
En el bucle "repetir Población" se generan todos los puntos. Tantos como el valor de la variable Población, cada uno en una posición diferente de la pantalla. En algunos clones la variable Cuarentena vale SI y en otros vale NO. Ese valor se define en forma aleatoria dependiendo del valor asignado a la variable Distanciamiento social. Si esa variable es baja entonces van a haber muchos clones en estado NO y pocos clones en estado SI. A la inversa, si la variable Distanciamiento social es alta, entonces pocos clones tendrán la variable Cuarentena en NO y muchos en SI.

Sección 3:
Después del bucle se coloca al último clon generado al centro de la pantalla (x=0, y=0) y se lo transforma en una persona infectada que no está en cuarentena. Esto se hace mediante el cambio de disfraz a "infectado" y las variables Persona = 'infectado' y Cuarentena = NO. 

Sección 4:
Al final del primer bloque se realiza un bucle que es el motor de la simulación. En cada ciclo se envía un clock-tick (que es como un pulso de reloj), que hace que todos los clones actúen simultáneamente según las reglas de comportamiento establecidas en el bloque 2 del programa. Este bucle se repite durante 480 ciclos (esto se debe a que en cada ciclo las gráficas avanzan un pixel y el ancho de la pantalla es de 480 pixeles).




Bloque 2:

En este bloque es donde se define el comportamiento que van a seguir las personas en cada ciclo de tiempo (clock-tick).

Tiene 4 secciones:
 (1) Se define el movimiento de las personas que no están en cuarentena.
 (2) Se define el comportamiento de las personas susceptibles cuando tocan a alguien infectado.
 (3) Se incrementa el tiempo que lleva enferma cada persona infectada.
 (4) Se establece la recuperación de las personas infectadas cuando superan la duración de la enfermedad.

Sección 1:
A todas las personas que no están en cuarentena se las hace girar un ángulo aleatorio y que avancen una distancia que es más grande cuanto menor sea la variable Distanciamiento social.

Sección 2:
Se chequea si las personas susceptibles están tocando a alguien infectado (a través del sensor de color). A esa persona se le cambia el estado y el disfraz a infectado. Consecuentemente se incrementa en 1 el número de infectados y se reduce en 1 el número de susceptibles. También se toca una alarma sonora que anuncia el momento en que hay un nuevo infectado.

Sección 3:
Se incrementa en 1 la variable Tiempo enfermo de cada persona infectada, que es como el reloj interno de la enfermedad.

Sección 4:
Cuando una persona infectada supera la duración de la enfermedad (que aquí la he fijado en 40), se la considera recuperada y entonces se le cambia su estado y el disfraz a recuperado. En consecuencia el número de infectados se reduce en 1 y el número de recuperados se incrementa en 1.






 Los tres disfraces del personaje persona:




Las gráficas:

El código para realizar las gráficas es muy simple. Se utilizan tres lápices con tres colores diferentes, uno para cada variable: verde-susceptibles, rojo-infectados y azul-recuperados.
Al inicio se define la posición de cada lápiz en x=-240, que es el borde izquierda de la pantalla. Por otra parte a la variable que se quiere graficar se le resta 180 para definir la coordenada y, debido a que el borde inferior de la pantalla es y=-180.
Luego en cada ciclo de tiempo (clock-tick), se hace que la posición x se incremente en 1, para que el lápiz avance un pixel hacia la derecha, mientras que la coordenada y se obtiene restando 180 al valor de la variable que se está graficando (por el mismo motivo explicado en el párrafo anterior).

Programa que dibuja la gráfica de personas susceptibles (verde):

Programa que dibuja la gráfica de personas infectadas (rojo):

Programa que dibuja la gráfica de personas recuperadas (azul):



En este enlace puedes acceder al código del simulador para experimentar con él, copiarlo o modificarlo: https://scratch.mit.edu/projects/379279574



VISUALIZACIÓN DE LA RED DE CONTAGIOS:
Esta segunda simulación muestra solamente los caminos seguidos por las personas infectadas, multiplicando los contagios en una especie de reacción en cadena:


Es un programa muy similar al anterior pero simplificado.
Se puede acceder aquí al código: https://scratch.mit.edu/projects/382135237




Un par de comentarios finales. Este código está inspirado en el artículo que Harry Stevens publicó en el Washington Post, "Por qué brotes como el coronavirus crecen exponencialmente y cómo 'aplanar la curva'.", y también en el gif "Aplanar la Curva" de @XTOTL. Ambos citados aquí:


Más notas en este blog, relacionadas con coronavirus: Aquí.





Gracias por leerme.
Ojalá te haya gustado esta nota.
Me gustaría conocer tus opiniones. No dudes en compartir tus comentarios al final de esta página.

Si te gustó, puedes compartirlo en tus redes.
¡Gracias por tu apoyo!

En este botón puedes dejarme una pequeña colaboración:






Comentarios