Saltar al contenido principal

4. Modelo de Epidemia

Ver este tutorial en Google Docs external link

Crearás un modelo de epidemia que simula la propagación de una enfermedad a través de una población.

Requisitos Previos

  • Navegar al perfil, crear/renombrar proyectos
  • Crear agentes Turtle y darles diferentes rasgos (color/forma)
  • Cambiar entre páginas
  • Reiniciar la simulación: eliminar agentes Turtle antiguos antes de crear nuevos
  • Dispersar agentes Turtle

Objetivos de Aprendizaje

  • Describir cómo usar el bloque "random___" para asignar un rasgo a una parte de las poblaciones de agentes y en el movimiento
  • Formar expresiones condicionales usando operadores de comparación y bloques "If___"
  • Dar un ejemplo de una colisión dependiente de rasgos y explicar cómo se programan
  • Explicar cómo el modelo simula con precisión un modelo de epidemia
  • Construir un gráfico de líneas de agentes Turtle sanos e infectados

Nuevos Términos

Random

Nuevos Bloques

Random___With _ % chance

Descripción General

Para construir este modelo, necesitarás:

  1. Crear agentes Turtle en el mundo.
  2. Hacer que algunos de esos agentes Turtle estén enfermos.
  3. Hacer que los agentes Turtle se muevan.
  4. Hacer que la enfermedad se propague mediante colisiones.
  5. Crear un gráfico de líneas que muestre la cantidad de agentes Turtle enfermos y sanos.
  6. Hacer que los agentes Turtle se recuperen.
  7. Expandir el modelo y hacerlo tuyo.

Parte 1: Crear Agentes Sanos

Objetivo: Crear 300 agentes amarillos que representan la población "sana"

Pasos

  • Crear un nuevo proyecto en blanco y renombrarlo a "Epidemic (Tu nombre de usuario)"
  • En la página The World, crear 300 agentes Turtle cuando se presione "setup"
  • Establecer el color del agente en amarillo y la forma en esfera
  • Dispersar todos los agentes cuando se presione "setup"
  • Eliminar todos los agentes antiguos cuando se presione "setup"

Bloques de Código Útiles

BloqueCajónUso
when pushed blockInterfaceEjecuta el código dentro del bloque cuando se presiona un widget Push Button.
create each do blockAgentsCrea una cierta cantidad de agentes, y cada agente ejecuta los comandos dentro del bloque.
delete everyone blockAgentsElimina todos los agentes de The World.
set my to blockTraitsEstablece un cierto rasgo de un agente a otro valor.
scatter blockAgentsColoca un agente en una ubicación aleatoria dentro de The World.

Verifica tu Progreso

Haz clic en Run Code y setup. Deberías ver 300 agentes dispersos por SpaceLand.

300 yellow agents scattered
Mostrar Solución
Part 1 solution code

Parte 2: Crear Agentes Enfermos

Objetivo: Crear 5 agentes rojos que representan la población "enferma"

Pasos

  • En la página The World, crear 5 agentes que estén "enfermos" cuando se presione setup (usar el mismo "when pushed _" del paso anterior)
    • Indicar esto con el color rojo.
    • Establecer la forma del agente en esfera
  • Dispersarlos

Bloques de Código Útiles

BloqueCajónUso
create each do blockAgentsCrea una cierta cantidad de agentes, y cada agente ejecuta los comandos dentro del bloque.
set my to blockTraitsEstablece un cierto rasgo de un agente a otro valor.
scatter blockAgentsColoca un agente en una ubicación aleatoria dentro de The World.
color blockTraitsCrea el color especificado.

Verifica tu Progreso

Haz clic en Run Code y setup. Deberías ver 300 agentes amarillos y cinco agentes rojos dispersos por SpaceLand.

300 yellow and 5 red agents
Mostrar Solución
Part 2 solution code

Parte 3: Hacer que los Agentes se Muevan

Objetivo: Hacer que los agentes se muevan aleatoriamente por SpaceLand

Pasos

  • En la página Turtle, mientras forever esté activado, hacer que el agente:
    • Avance 1 paso
    • Gire aleatoriamente a la izquierda entre 0 y 10 grados
    • Gire aleatoriamente a la derecha entre 0 y 10 grados

Bloques de Código Útiles

BloqueCajónUso
while toggled blockInterfaceEjecuta el código dentro del bloque cuando un widget Toggle Button está activado.
forward blockMovementMueve al agente hacia adelante un cierto valor.
left by degs blockMovementGira a la izquierda un número determinado de grados durante cada tick.
right by degs blockMovementGira a la derecha un número determinado de grados durante cada tick.
random to blockMathRandom _ to _ devuelve un entero entre los dos valores, inclusive. Genera un nuevo número aleatorio cada vez.

Verifica tu Progreso

Haz clic en Run Code, setup y forever. Deberías ver que los agentes Turtle se mueven en un camino aleatorio por SpaceLand.

Mostrar Solución
Part 3 solution code

Parte 4: Hacer que la Enfermedad se Propague

Objetivo: Programar una colisión para simular la propagación de la enfermedad haciendo que los agentes "sanos" se vuelvan rojos cuando colisionan con un agente "enfermo"

Pasos

  • En la página Turtle, programar una colisión donde:
    • Si yo (el que colisiona) soy amarillo y el otro agente (el colisionado) es rojo, entonces cambiar mi color a rojo

Bloques de Código Útiles

BloqueCajónUso
on collision with blockDetectionEjecuta el código cuando un agente colisiona con otro objeto seleccionado.
set my to blockTraitsEstablece un cierto rasgo de un agente a otro valor.
collidee blockDetectionSe refiere al objeto que colisiona con el agente.
trait of blockTraitsDevuelve el valor de un rasgo perteneciente a otro agente (como collidee o my parent).
if blockLogicEjecuta el código dentro del bloque si se cumple la condición.
equals blockLogicDetermina si las dos entradas son equivalentes y devuelve verdadero o falso.

Verifica tu Progreso

Haz clic en Run Code, setup y forever. Deberías ver que los agentes amarillos se vuelven rojos al colisionar entre sí.

Disease spreading
Mostrar Solución
Part 4 solution code

Parte 5: Crear un Gráfico de Líneas para Mostrar Cada Población

Objetivo: Crear un widget de gráfico de líneas que cuente cada población y limpiar el gráfico cuando se presione "setup"

Pasos

  • En el modo "edit interface":
    • Agregar un widget de gráfico de líneas a SpaceLand y nombrarlo "Population"
    • Crear dos series -- "# of healthy turtles" y "# of sick turtles"
  • En la página The World, mientras forever esté activado:
    • Hacer que el gráfico "Population" actualice la serie "# of healthy turtles" contando la cantidad de agentes amarillos dentro de SpaceLand
      • Hacer que el eje x sea el reloj y el eje y sea "# of healthy turtles"
    • Hacer lo mismo para la serie "# of sick turtles" y que cuente los agentes rojos
  • Programar que cuando se presione "setup", el reloj se establezca en 0 y el gráfico de líneas se limpie

Bloques de Código Útiles

BloqueCajónUso
add data to line graph blockInterfaceAgrega datos compuestos por pares de coordenadas x e y.
count within steps blockDetectionCuenta el número de agentes de una raza específica en un radio dado con un rasgo específico. Usa 200 pasos para cubrir todo el terreno.
color blockTraitsRepresenta un color específico o un color aleatorio elegido del menú desplegable.
clock blockEnvironmentDevuelve el valor del reloj, medido en "ticks".
set clock to blockEnvironmentEstablece el valor del reloj a un número. Normalmente, cuando reinicias el reloj, quieres comenzar en 0.
clear line graph blockInterfaceElimina los datos existentes en el gráfico.

Verifica tu Progreso

Haz clic en Run Code, setup y forever. Deberías ver que el gráfico de líneas se actualiza.

Population line graph
Mostrar Solución

Código de configuración (página The World):

Part 5 setup solution

Código de actualización del gráfico (página The World):

Part 5 graph solution

Parte 6: Hacer que los Agentes se Recuperen

Objetivo: Programar que los agentes rojos tengan una baja probabilidad de cambiar de color a azul

Pasos

  • En la página Turtle, en el bloque existente "while _ is toggled":
    • Programar que si un agente es rojo, tenga un 5% de probabilidad de que su color cambie a azul
      • El azul ahora representa "inmunidad" a la enfermedad

Bloques de Código Útiles

BloqueCajónUso
set my to blockTraitsEstablece un cierto rasgo de un agente a otro valor.
color blockTraitsRepresenta un color específico o un color aleatorio elegido del menú desplegable.
my blockTraitsSe refiere al rasgo propio de un agente.
if blockLogicEjecuta el código dentro del bloque si se cumple la condición.
equals blockLogicDetermina si las dos entradas son equivalentes y devuelve verdadero o falso.
with % chance blockLogicEjecuta los comandos adjuntos al gancho aleatoriamente con un cierto porcentaje de probabilidad cada vez que se ejecuta el bloque.

Verifica tu Progreso

Haz clic en Run Code, setup y forever. Deberías ver que los agentes rojos cambian su color a azul.

Mostrar Solución
Part 6 solution code

Parte 7: Extensiones

Piensa en una pregunta para investigar o simplemente experimenta con el modelo existente. Ten en cuenta que las sugerencias en la lista a continuación tienden a progresar de tareas más fáciles a más difíciles. Algunas de ellas también requieren que aprendas a usar nuevos bloques que aún no se han presentado. También puedes proponer tus propias extensiones y simplemente explorar/probar cosas por tu cuenta.

  • Cambiar las condiciones de configuración: % inmunes, % infectados
  • Cambiar la probabilidad de recuperación -- por ejemplo, ¿cómo afecta reducirla (los agentes Turtle tardan más en recuperarse) a la propagación de la enfermedad?
  • Representar el uso de mascarillas o el lavado de manos: durante una colisión con un agente Turtle enfermo, programar que haya una probabilidad reducida de que un agente Turtle sano se enferme.
  • Variar la probabilidad de recuperación -- quizás un porcentaje de la población se recupera rápidamente mientras que otros tardan más en recuperarse.
  • Variar la probabilidad de que un agente Turtle se enferme -- quizás un porcentaje de la población es más susceptible que otros.
  • Agregar un centro de vacunación (nueva raza) que haga inmunes a los agentes Turtle cuando colisionen con él. ¿Todos los agentes Turtle necesitan ser vacunados para detener la propagación de la enfermedad?
  • Agregar doctores (nueva raza) que puedan "curar" a los agentes Turtle enfermos. Si ya hiciste Paintball, puedes programar controles de teclado para mover a uno de los doctores y "disparar" vacunas a los agentes Turtle.
  • ¿Qué factor parece frenar mejor la propagación de la enfermedad?

Copyright 2024 MIT Scheller Teacher Education Program. Distribuido bajo la licencia Creative Commons CC BY-NC 4.0.