¿Cómo se propaga un virus? Simulamos una epidemia vírica para conocerlo mejor.

Banner recuros simulación epidemia por virus
  • Nivel:
    • Bachillerato
    • E.S.O.
    • F.P.
  • Área del pensamiento computacional:
    • Programación

16/03/2020

La simulación: un poderoso recurso para fomentar el Pensamiento Computacional

  Una de las aplicaciones más valiosas de las computadoras es la simulación de fenómenos naturales y sociales. En esencia una simulación consiste en la construcción de un programa informático, que llamaremos simulador, cuya ejecución nos permite comprender y adquirir intuición sobre algún tipo de fenómeno. Para elaborar un simulador debemos comenzar por proponer las reglas que gobiernan el fenómeno, esto es, primero tenemos que proponer un modelo. No hay simulación sin modelo. Este conjunto de reglas, o modelo, las extraemos desde la experiencia, haciendo uso de alguna teoría o, lo que es más habitual, combinando teoría y experiencia. De hecho, usando la simulación como herramienta para comprender los fenómenos, podemos proponer nuevas teorías o mejorar las existentes. También podemos realizar experimentos “ficticios” para apoyar o rechazar teorías o ideas que se nos pueden ocurrir y nos gustaría comprobar cómo afectan al fenómeno sin necesidad de realizar experimentos reales, los cuales pueden llegar a ser muy costosos. Pero además de la utilidad como herramienta para generar conocimiento, programar una simulación, por sencilla y poco realista que sea, supone un completísimo ejercicio de expresión computacional. En el popular libro “Structure and Interpretation of Computer Programs”, Harold Abelson, Gerald Say Sussman y Julie Sussman defienden la idea de que un lenguaje de programación es algo más que un medio para instruir a una computadora para realizar una tarea. También sirve como un marco dentro del cual organizamos nuestras ideas acerca de los procesos. Estos mismos autores agradecen a sus maestros Seymour Papert y Marvin Minsky el concebir la computación como un medio de expresión para explorar ideas que, de otra manera, serían demasiado complejas para tratarlas con precisión. Y es que los lenguajes de programación, como procuraremos mostrar en este recurso didáctico, son un medio ideal para expresar las complejas ideas y reglas que, en su conjunto constituyen un modelo, así como dotarlo de vida mediante una simulación de la cual vamos a extraer nuevos datos que mejorarán nuestra comprensión del fenómeno. Y además, como casi todo lo que se puede hacer con una computadora, este proceso es iterativo; comenzamos por construir modelos muy sencillos y los vamos mejorando mediante nuevas reglas descubiertas a medida que la simulación nos revela los “misterios” que gobiernan el fenómeno objeto de estudio Finalmente, la construcción de modelos y simulaciones van a contribuir decisivamente al desarrollo de las habilidades de Pensamiento Computacional. Usando el marco desarrollado por Karen Brennan y Mitchel Resnick para el estudio y la evaluación del Pensamiento Computacional, podemos decir que la elaboración de modelos sobre cualquier tipo de fenómenos y el desarrollo de simulaciones, intervienen en todas las dimensiones del Pensamiento Computacional:
  • Conceptos: secuencias, bucles eventos, paralelismo, condicionales, operadores, datos.
  • Prácticas: ser incremental e iterativo, probar y depurar, reusar y remezclar, Abstraer y modularizar,
  • Perspectivas: expresar, conectar, cuestionar.
Si continúas leyendo hasta el final, y estudias el código de los programas que te vamos a ofrecer, comprobarás que cada uno de los conceptos, prácticas y perspectivas aparecen a medida que construimos nuestra simulación.  

El fenómeno: la expansión de una epidemia vírica

  En el momento de escribir este recurso, el mundo entero se encuentra sumido en una situación histórica, la provocada por la expansión del virus SARS-CoV-2, un tipo de coronavirus que produce una enfermedad denominada COVID-19. El grado de expansión es tal que la OMS ha calificado el fenómeno como pandemia y en España, hace unas horas, se ha decretado el estado de alarma. Son varias las medidas exigidas a los ciudadanos para combatir la expansión de este virus. Pero de todas ellas la más importante y eficaz para frenar el número de contagios es el aislamiento, en la medida de lo posible, de todos los ciudadanos en sus casas. Algo que a muchos está costando comprender y que ha comenzado a implementarse con el cierre de centros educativos y otras dramáticas medidas que probablemente estén por llegar. En lo que sigue vamos a desarrollar varios modelos para la expansión de un virus que nos ayuden a entender por qué razón hay que quedarse en casa para combatir esta pandemia.  

Seleccionamos un lenguaje de programación

  Comenzamos por elegir el lenguaje de programación que nos ayudará a expresar el modelo y la simulación de manera que pueda ejecutarse en una computadora y, sirva como medio para expresar ideas. Probablemente el lenguaje de programación que un científico elegiría para llevar a cabo este trabajo sería Python. Es fácil de aprender, muy expresivo, muy potente, dispone de un ecosistema de librerías muy bien documentadas y varios entornos de ejecución, como Anaconda, potentes y fáciles de instalar en cualquier computador personal. Es un hecho: Python es el lenguaje de programación más usado por los científicos de datos. Javascript también podría ser un buen candidato, especialmente porque es un lenguaje que dispone de un entorno de ejecución en cualquier navegador web estándar (Firefox, Chrome, Safari, Microsoft Edge, son los más conocidos). Y esto facilita la visualización de la simulación al utilizar el soporte gráfico que ofrece el propio navegador. Pero queremos que los modelos y simulaciones de este recurso puedan ser entendidos, reproducidos y mejorados por el mayor número de personas y, especialmente, por profesores de todo tipo de asignaturas que están incorporando el Pensamiento Computacional a su práctica docente. Por eso hemos elegido Snap!, un lenguaje visual de bloques muy parecido al archiconocido Scratch, pero que ofrece más elementos de programación, lo cual se agradece cuando el problema que tratamos presenta ciertas complejidades. Ya tenemos la herramienta, ahora toca pensar.  

Creamos modelos que nos ayuden a comprender el fenómeno

  Si hay un concepto computacional que esté en las mismas entrañas del modelado de fenómenos, ese es la abstracción. Esto es: extraer las características fundamentales del fenómeno, desechar  otras que, aunque pueden ser importantes en la realidad, no nos interesan o simplemente no conocemos, y aproximar las características que hayamos seleccionado mediante supuestos que puedan ser programados. La abstracción puede realizarse a distintos niveles. Generalmente comenzamos con una abstracción muy acusada que da lugar a modelos muy sencillos pero que ya explican algunos comportamientos del fenómeno. Poco a poco, en sucesivas iteraciones, vamos añadiendo más elementos o mejorando las aproximaciones de los que ya hemos tenido en cuenta, para obtener modelos más cercanos a la realidad del fenómeno que estudiamos. Nunca reproduciremos exactamente el fenómeno, pero podemos alcanzar un resultado bastante fiel. Pensemos, por ejemplo, en los modelos profesionales de predicción meteorológica; no son acertados al 100%, pero en el corto plazo suelen predecir muy bien el tiempo. Esta técnica iterativa es la que hemos utilizado en este recurso para llegar a entender por qué se nos pide quedarnos en casa durante un tiempo para detener el avance de la epidemia causada por el  coronavirus. Vamos a proponer 5 modelos en grado ascendente de complejidad. En cada modelo establecemos unas hipótesis, que son las bases para construir las reglas del modelo, la URL al código de Snap! que implementa el simulador, y un video en el que se muestra como usar dicho simulador para obtener resultados. Con la URL del proyecto Snap! podéis probar vosotros mismos la implementación completa de cada modelo, ver el código y copiarlo para su estudio y modificación.  

Modelo 0

  Para elaborar este primer modelo hemos usado las siguientes hipótesis:
  • Solo hay enfermos y sanos. Una persona que ha sido infectada por el virus se considera enferma. Esto es una gran simplificación puesto que en la realidad una persona puede ser portadora del virus pero no desarrollar la enfermedad. Esto es un claro ejemplo de abstracción: en este modelo solo nos interesa clasificar a la población en los que “tienen” el virus y los que no. Llamarlos enfermos y sanos es lo de menos, podríamos haberles llamado “portadores” y “no-portadores” o “contagiados” y “limpios”. Queremos entender el proceso de expansión y contagio del virus, no las consecuencias en la salud del mismo.
  • No se producen muertes. Obviamente otra abstracción que permitirá simplificar mucho la implementación del modelo y que, a pesar de lo socialmente y éticamente relevantes que son las muertes, creemos que no aporta demasiado a la esencia del fenómeno que pretendemos explicar.
  • El contagio se produce por cercanía entre personas de manera que cuando un enfermo y un sano están suficientemente cerca, el sano se contagia con toda seguridad. Estableceremos una distancia alrededor de cada persona y la llamaremos radio de contagio, que definirá una circunferencia. Si la circunferencia de un sano colisiona con la de un enfermo, el sano se convierte en enfermo inmediatamente. Esto es una clara simplificación, pero puede modelar bastante bien la eficacia de contagio de un virus. Son muchas las formas en que un virus puede pasar de una persona a otra. La más típica es mediante microgotas producidas por las personas al estornudar o toser, como por ejemplo el coronavirus que ha causado esta crisis. Incluso estas microgotas que alcanzan superficies como muebles o picaportes pueden pasar a la mano de una persona sana y, al tocarse la nariz o la boca, penetrar en su organismo e infectarlo. Otras pueden ser por simple contacto con la piel (como el ébola), otras a través de la sangre o el semen (como el VIH). Cada virus tiene su eficacia de contagio. El valor que demos a este radio de contagio, es decir un solo número,  va a modelar la eficacia de contagio del virus.
  • Los enfermos no se curan. No se mueren, pero tampoco se curan. Qué le vamos hacer. Es lo que tiene modelar.
En el siguiente enlace tienes la implementación completa del modelo 0 y la simulación: Si tienes una cuenta en la plataforma Snap!, puedes ver el código y guardar una copia en tu cuenta para estudiarlo y modificarlo.  
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Modelo 1

Estas son las hipótesis que hemos usado para su elaboración:
    • Solo hay enfermos y sanos.
    • No se producen muertes.
    • El contagio se produce por cercanía entre personas de manera que cuando un enfermo y un sano están suficientemente cerca el sano se contagia con toda seguridad.
    • Los enfermos se curan después de un tiempo.
Como ves en este modelo simplemente hemos cambiado la cuarta hipótesis del modelo 0.
En el siguiente enlace tienes la implementación completa del modelo 1 y la simulación:
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Modelo 2

Estas son las hipótesis que hemos usado para elaborar el tercer modelo y su simulación:
    • Solo hay enfermos y sanos.
    • No se producen muertes.
    • El contagio se produce por cercanía entre personas de manera que cuando un enfermo y un sano están suficientemente cerca el sano se contagia con toda seguridad.
    • Los enfermos se curan después de un tiempo.
    • Cuando un sano se contagia también se inmuniza.
En este nuevo modelo hemos realizado un nuevo supuesto; la inmunidad que adquiere una persona sana cuando es contagiada. Esto significa que cuando se cure, no podrá volver a ser contagiada. En el mundo real lo que ocurre es que, una vez inmunizado, si se vuelve a contagiar, el sistema inmunitario de la persona está preparado para acabar con el virus. Pero para simplificar la implementación del modelo, suponemos que esto último es equivalente a que los sanos inmunizados no se pueden contagiar de nuevo.
En el siguiente enlace tienes la implementación completa del modelo 2 y la simulación:
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Modelo 2 con aislamiento de enfermos

Este modelo es exactamente igual al anterior, pero vamos a contener los movimientos de los enfermos dentro de un radio de aislamiento. Aunque restringimos el movimiento de los enfermos, los sanos pueden seguir pasando cerca de ellos y contagiarse. Este supuesto modela mejor lo que sucedería en la realidad, ya que es muy probable que muchos de los enfermos sigan manteniendo contacto con personas sanas, aunque sea esporádicamente.
En el siguiente enlace tienes la implementación completa del modelo 2 con aislamiento de enfermos y la simulación:
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Modelo 2 con aislamiento total

Ahora vamos a modificar el modelo 2 haciendo que todas las personas, sanas o enfermas, se muevan dentro de un círculo definido por el radio de aislamiento y con centro la posición de la pantalla en la que se haya creado.
En el siguiente enlace tienes la implementación completa del modelo 2 con aislamiento de todas las personas y la simulación:
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Modelo 2 con aislamiento total que solo cumple un porcentaje de personas.

Y para finalizar vamos a ver las consecuencias que tiene el hecho de que no todas las personas cumplan las medidas de aislamiento. En este modelo hemos añadido al modelo anterior una cantidad, que hemos denominado “porcentaje de personas que cumplen” y que determinará cuántas personas, sanas o enfermas, se mantienen dentro del radio de aislamiento.
En el siguiente enlace tienes la implementación completa del modelo 2 con aislamiento total que no todos cumplen y la simulación:
Y en el siguiente video te mostramos como funciona este primer simulador y las conclusiones que se extraen de sus resultados.

Lo que dicen los expertos

Hay que dejar muy claro que todo lo que hemos hecho hasta ahora es un ejercicio de programación mediante el que procuramos mostrar en qué consiste el modelado y la simulación de fenómenos. Seguramente los modelos que hemos propuesto sean muy incompletos y hayamos pasado por alto reglas relevantes que rigen las epidemias víricas. Y es que los que hemos realizado este recurso no somos expertos en virología ni en epidemiología ni en nada relacionado con las cuestiones sanitarias. Somos profesores con ganas de encontrar actividades atractivas que a la vez generen conocimiento útil. No obstante, para conocer lo que dicen expertos en este tema, os dejamos aquí un video muy revelador y didáctico en el que el Dr. Fernando Simón, prestigioso epidemiólogo y director del Centro de Coordinación de Alertas y Emergencias Sanitarias del Ministerio de Sanidad, nos habla sobre dos gráficas que hay que entender para explicar cómo funcionan las epidemias. Contrasta lo que nos cuenta con lo que hemos aprendido a partir de nuestros modelos y verás como no vamos nada descaminados. Después de ver este video, te proponemos un interesante ejercicio: construir un modelo y una simulación que ayude a entender el factor número de reproducción o R0, un concepto que Fernando Simón explica en el video y al que da una gran importancia para entender las epidemias.

La implementación de los modelos

  Nos ha quedado un recurso bastante extenso. Por eso no vamos a entrar en cómo hemos realizado la implementación en detalle. Aunque prometemos que si hay interés en saber más sobre cómo hemos programado estas simulaciones, elaboraremos otro recurso con todos los detalles de la implementación. Háznoslo saber por twitter usando la etiqueta #CodeIntef o #PiensaEnCode. De todas formas, siempre puedes crearte una cuenta de Snap!, acceder a las URLs de las implementaciones que hemos dado a lo largo de este recurso, hacer clic en “See code” y una vez dentro del editor, guardarlo en tu cuenta. A partir de ahí el código es tuyo para estudiarlo y modificarlo a tu antojo. Para ayudarte en su estudio te diremos que hemos usado 3 objetos:
  • Controlador, sirve para inicializar las variables del modelo, crear los clones de personas enfermas y sanas, y para iniciar la simulación.
  • Sano, representa a una persona sana y se hacen tantos clones de esta como se haya establecido en la variable número de personas y en una proporción dada por la variable porcentaje de sanos.
  • Enfermo, representa a una persona enferma mediante una circunferencia de color rojo y se hacen tantos clones de esta como se haya establecido en la variable número de personas y en una proporción dada por el valor (100 – porcentaje de sanos).
Se utilizan colisiones de los objetos Sano con Enfermo, pues son las únicas que determinan un contagio. Cuando se dan, se crea un nuevo clon de Enfermo y se elimina el clon de Sano que detecta la colisión. Cada modelo determina las reglas para saber cuando un Enfermo se convierte en Sano y viceversa.  

Más recurso sobre simulaciones.

  Si te hemos convencido en este recurso de la importancia didáctica que tienen las simulaciones en todos los aspectos, desde ayudar a comprender los fenómenos naturales y sociales que se trabajan en muchas asignaturas, hasta fomentar el Pensamiento Computacional, te recomendamos que sigas el siguiente curso en abierto de la Junta de Andalucía: https://educacionadistancia.juntadeandalucia.es/profesorado/autoformacion/course/view.php?id=153 En la introducción de este curso puedes leer lo siguiente sobre la idoneidad de usar simulaciones en el aula: “¿Se obtienen buenos resultados al usar simulaciones en el aula? Un grupo de investigadores de la organización SRI trató de responder esta pregunta hace cuatro años, para lo que estudiaron todas las publicaciones desde el año 1991 en las que se utilizaban simulaciones en el aula y se ofrecían resultados cuantitativos que pudieran compararse. Las conclusiones del estudio no admiten demasiada discusión: cuando los estudiantes utilizan simulaciones en el aula obtienen, de media, unos resultados académicos un 24.86% mejores que si no tuvieran acceso a la simulación.” Lo que supone un claro estímulo para incorporar este tipo de actividades a la práctica docente. Además el Real Decreto por el que se establece el currículo de Bachillerato del Ministerio, señala repetidas veces la conveniencia de usar simulaciones en muchas de las asignaturas.  

Conclusión

La modelización y simulación son dos potentes herramientas, que van siempre dadas de la mano y que nos ayudan a entender el funcionamiento de fenómenos complejos de todo tipo: naturales o sociales. Por eso constituyen una herramienta cotidiana para la labor científica en todos los campos del conocimiento. Además, su elaboración revela con claridad la potencia expresiva de los lenguajes de programación, los cuales no solo sirven para decirle a la máquina como debe ejecutar un programa, sino que también sirven como medio de expresión y comunicación de complejas ideas que, de otra manera sería complicado realizar con precisión. A lo largo del recurso hemos construido varios modelos sencillos de una epidemia vírica que nos han ayudado a comprender la razón de la medida más controvertida que se está tomando para frenar los efectos del COVID-19: el aislamiento en casa de toda la población en la medida de lo posible. Comenzamos a trabajar en este recurso a mediados de Febrero de 2020, cuando las noticias que llegaban de China sobre el coronavirus de Wuhan eran constantes y preocupantes. Un mes después Italia y después España se encuentran en la misma situación y debemos aprender de lo que ya ha ocurrido, y atender a todas las instrucciones que las autoridades pertinentes nos están dando. Esperamos que este recurso didáctico, además de servir como ejercicio de programación para el desarrollo del Pensamiento Computacional, sirva para concienciar y comprender aún más por qué debemos quedarnos en casa en una pandemia como la que nos está tocando vivir.  

Extra! extra!

  Mientras dábamos los puntos finales a la redacción y publicación de este recurso, ha aparecido una espectacular simulación que muestra muy claramente por qué es importante quedarse en casa. Ha sido realizada nada más y nada menos que por Mitchel Resnick, un relevante investigador del MIT que hemos citado en este mismo recurso en relación a un popular marco de estudio sobre Pensamiento Computacional, y que es el máximo responsable del desarrollo del proyecto Scratch. Puede acceder a ella aquí:
Y aquí la versión en español que han traducido programamos.es https://scratch.mit.edu/projects/376721268/