top of page

Projet Scratch

Simulateur de propagation d'épidémie

Pierre Huguet de l’association "On va essayer" propose une simulation de la propagation d’une épidémie.

Il explique ce qu’est un modèle scientifique et son intérêt. Il fait fonctionner ce modèle avec Scratch, le célèbre logiciel de programmation graphique abordable par toutes et tous.

Cette modélisation avec Scratch permet de visualiser les mécanismes d'une épidémie.

C’est un simulateur très simple à vocation pédagogique. Il ne permet aucune prévision quantitative.

Extrait de la vidéo de présentation du projet de Pierre Huguet : 

Si tu souhaites voir le projet complet de Pierre Huguet :  http://onvaessayer.org/scratch/epidemy/epidemyV0.php

Objectif de ton projet

 

Ecrire et exécuter un programme avec Scratch permettant de simuler la propagation d'une épidémie

Cette simulation s'appuiera sur le projet de Pierre Huguet mais restera plus simple.

 

Pour réussir ce projet, suis les étapes proposées l'une après l'autre.

Etape 0 - Démarrer le projet

Etape 0

Pour démarrer correctement : 

  1. Ouvrir le projet avec la version de Scratch en ligne

  2. Sauvegarder le projet sur ton ordinateur

  3. Comprendre l'environnement Scratch

  4. Comprendre le projet de départ

La sauvegarde se fait

dans le dossier "Téléchargement"

sous le nom "Simulateur épidémie - v0"

 Remarque : 

Lorsque tu souhaites reprendre le travail avec le fichier que tus as enregistré sur ton ordinateur, tu n'es pas obligé d'ouvrir le projet de départ :

  • Lance Scratch en ligne

https://scratch.mit.edu/

Puis clique sur "Commencer à créer"

  • Charge ton fichier

Commande "Load from your computer"

 

N'oublie pas de changer la langue en français

(menu "Globe" à gauche de "Fichier")

  Pense à sauvegarder régulièrement  

2

2020-04-29 17_05_40-Microsoft Edge.png
cat_orange_01.jpg

Clique ici pour ouvrir le projet Scratch

1

2020-04-29 11_54_59-Microsoft Edge.png

Un nouvel onglet s'ouvre dans le navigateur

Clique sur

"Voir à l'intérieur" pour lancer l'édition du programme

2

1

Plus d'explications sur l'environnement Scratch

Ces deux vidéo présente la version 2 de Scratch.

Le principe reste identique

Ajouter un lutin et faire son 1er programme

Vocabulaire sur l'environnement de Scratch

Clique sur l'image pour l'agrandir

2020-04-29 12_07_19-Microsoft Edge.png

3

4

Ce projet de départ contient un seul lutin appelé "Personne". Ce lutin représente un individu qui pourra se déplacer dans la scène.

 

Trois costumes lui sont attribués :

  • CostumeBonneSanté

  • CostumeMalade

  • CostumeGuéri

L'onglet "Costume" permet de voir ces trois costumes.

Mais il ne faut pas les modifier.

Il est donc préférable pour la suite du projet, de rester toujours sur l'onglet "Code".

2020-04-29 12_06_30-Microsoft Edge.png
Etape 1

Etape 1 - Créer la population

Un sous-programme est un bloc d’instructions réalisant une certaine tâche. Il possède un nom et est exécuté lorsqu'il est appelé.

Un script bien structuré contiendra un programme dit principal, et plusieurs sous-programmes dédiés à des fonctionnalités spécifiques.

 

Quand le programme principal fait appel à un sous–programme, il suspend son propre déroulement, exécute le sous–programme, et reprend ensuite son fonctionnement.

1

2020-04-30 10_02_08-Microsoft Edge.png

Avantage sur l'utilisation de sous programme :

  • Simplifier l'apparence et la longueur du script en évitant la duplication de code 

  • Améliorer la conception du script en réduisant la complexité par un découpage des tâches

On considère ici une population d'une centaine de personnes. Cette population peut représenter les habitants d'une ville ou d'un pays.

 

Tu dois compléter le programme principal pour :

  • "Créer un clone de moi même", instruction qui permet de copier une image du lutin

  • répéter 100 fois cette instruction

 

Tu dois créer un bloc d'instruction qui permet de :

  • positionner le clone aléatoirement (au hasard)

  • lui donner le costume "CostumeBonneSanté

 

L'exécution de ce bloc sera lancé par l'événement "Quand je commence comme un clone"

(événement qui ce trouve dans la bibliothèque "Contrôle")

3

2020-04-30 15_20_14-Microsoft Edge.png

La notion de variable

4

Dans ce projet, tu vas avoir besoin de connaitre l'état de chaque clone, pour pouvoir par exemple comptabiliser le nombre de malade ou de personne saine.

Pour cela tu dois créer une variable appelée "Santé".

 

Tu dois modifier le script pour affecter la variable "Santé" avec une valeur adaptée à chaque modification de costume.

2020-05-01 16_29_20-Microsoft Edge.png
2020-05-01 16_27_31-Microsoft Edge.png

Pour créer la population : 

  1. Comprendre la notion de bloc (sous programme)

  2. Créer le patient 0

  3. Créer une centaine de personnes

  4. Comprendre la notion de variable

Remarque

Le nom de la variable et sa valeur apparaissent dans la scène si cette variable est coché dans la liste des variables.

Dans ce projet il est inutile de faire apparaître la variable "Santé".

On considère ici qu’une épidémie démarre avec un premier malade qui pourra contaminer les personnes avec qui il sera en contact.

 

Tu dois créer un bloc (un sous-programme) appelé "Patient 0" qui réalisera les actions suivantes :

  • positionner le lutin "Personne" au centre de la scène

  • mettre à ce lutin le costume "CostumeMalade"

2

Il est conseillé avant de lancer l'exécution de cliquer sur le bouton "Stop" qui permet d'initialiser la scène

2020-04-30 12_04_39-Microsoft Edge.png

On peut vérifier l'exécution du programme dans la scène en cliquant sur le bouton "Commencer"

2020-04-30 12_05_25-Microsoft Edge.png
Etape 2

Etape 2 - Déplacer  la population

1

La centaine de clone, ainsi que le patient 0, doivent se déplacer de façon aléatoire dans la scène. Si un clone arrive sur un bord de la scène alors il doit "rebondir" pour rester à l'intérieur.

 

Cette façon de déplacer les clones permet de simuler, par exemple, le déplacement d'une population d'une ville à l'intérieur de cette ville.

Pour déplacer la population : 

  1. Comprendre le principe de déplacement

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

Ce déplacement élémentaire ainsi que le "rebond" si un bord de scène est touché seront exécutés dans un bloc sous-programme appelé "Bouger".

 Remarque : 

L'explication qui suit est donnée pour le lutin "Personne".

Mais il faut bien comprendre que toutes les actions effectuées sur ce lutin "Personne" se feront aussi sur chaque clone.

 Explication : 

Le déplacement du lutin va être cadencé par une "horloge" :

-> à chaque "top" d'horloge, le lutin tournera sur une position aléatoire et se déplacera de 3 pas.

Une instruction de Scratch (bibliothèque événement) permet d'envoyer un message à "tout le monde" (au lutin et donc aux clones). Cette instruction réalisera le "top horloge". Elle sera exécutée plusieurs fois dans le programme principal.

Une répétition de 480 fois sera choisi.

Une autre instruction de Scratch (bibliothèque événement) permet de lancer une suite d'instructions lorsqu'un message est reçu. Cette instruction permettra donc de lancer l'exécution d'un déplacement élémentaire (direction aléatoire + déplacement de 3 pas).

2020-05-01 19_29_58-Microsoft Edge.png
2020-05-01 19_28_51-Microsoft Edge.png

2

3

2020-05-01 21_48_53-Microsoft Edge.png
Etape 3

Etape 3 - Propager l'épidémie

Pour propager l'épidémie : 

  1. Comprendre le principe de propagation

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

1

Lors de cette étape, on s'intéresse uniquement à la propagation de l'épidémie. La guérison d'une personne se fera à l'étape suivante.

On considère ici qu’une épidémie démarre avec un premier malade qui peut contaminer les personnes avec qui il est en contact.

Lorsqu'une personne saine entre en contact avec une personne malade, alors elle devient à son tour malade.

 Remarque : 

L'explication qui suit est donnée pour le lutin "Personne".

Mais il faut bien comprendre que toutes les actions effectuées sur ce lutin "Personne" se feront aussi sur chaque clone.

 Explication : 

Pour détecter le contact entre deux clones, un test sera fait sur le contact avec la couleur orange (couleur du costume "CostumeMalade") :

Si la couleur orange est touchée

Alors Basculer le costume sur "CostumeMalade" et Mettre la variable "Santé" à "malade"

Ce test sera exécuté dans un bloc sous-programme nommé "Tester-bonne-santé".

Ce bloc sous-programme "Tester-bonne-santé" sera lancé après l'appel du sous-programme "Bouger" uniquement si la variable "Santé" du lutin est égale à "bonneSanté".

Il est en effet inutile de lancer le sous-programme "Tester-bonne-santé" si le lutin est déjà malade.

 Remarque sur l'instruction "couleur touchée ?" de Scratch 

Cette instruction renvoie une valeur logique : Vrai ou Faux

Il est absolument indispensable de régler la couleur à la véritable couleur orange du costume "CostumeMalade" :

Clique sur la couleur pour la modifier

2020-05-04 10_42_47-Microsoft Edge.png
2020-05-04 10_41_03-Microsoft Edge.png
2020-05-04 10_40_38-Microsoft Edge.png
2020-05-04 10_41_30-Microsoft Edge.png

Clique sur la pipette pour récupérer une couleur

Clique au milieu du "patient 0" pour récupérer la véritable couleur

2

3

2020-05-04 10_39_16-Microsoft Edge.png

Etape 4 - Guérir les personnes

Etape 4

Pour guérir les personnes : 

  1. Comprendre le principe de guérison

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

1

Lorsqu'une personne saine entre en contact avec une personne malade, elle est alors contaminée et devient à son tour malade.

On suppose ici que toute personne atteinte par la maladie peut en guérir au bout d'un certain temps.

La personne alors guérie est immunisée contre la maladie et ne peut donc plus contaminer d'autre personne.

2

 Remarque : 

L'explication qui suit est donnée pour le lutin "Personne".

Mais il faut bien comprendre que toutes les actions effectuées sur ce lutin "Personne" se feront aussi sur chaque clone.

 Explication : 

Pour connaitre depuis combien de temps le lutin est malade, il faut utiliser une variable locale au lutin. On appellera cette variable : "temps-depuis-contamination".

 

Lorsque un lutin en bonne santé est contaminé, alors il devient malade. Sa variable "Santé" est alors affectée à la valeur "malade". Il faudra aussi à ce moment initialiser la variable "temps-depuis-contamination" c'est à dire la mettre à zéro.

Cette variable "temps-depuis-contamination" doit aussi être initialisée pour le patient 0.

(donc dans le bloc sous-programme "Patient 0")

 

A chaque top d'horloge la variable "temps-depuis-contamination" devra être incrémentée c'est à dire qu'il faudra ajouter 1 à sa valeur.

Il faudra ensuite tester la valeur de la variable "temps-depuis-contamination" à la valeur du temps de guérison que l'on se sera fixé. On prendra ici 100 pour cette durée de guérison.

On aura donc le test suivant :

Si "temps-depuis-contamination" est supérieur à 100

Alors Basculer le costume sur "CostumeGuéri" et Mettre la variable "Santé" à "guéri"

L'incrémentation (ajouter 1) de la variable "temps-depuis-contamination" ainsi que ce test seront exécuté dans un bloc sous-programme nommé "Tester-contaminé".

 

Ce bloc sous-programme "Tester-contaminé" sera lancé dans l'événement "Quand je reçois top horloge" uniquement si la variable "Santé" du lutin est égale à "malade".

Il est en effet inutile de lancer le sous-programme "Tester-contaminé" si le lutin n'est pas malade.

 Remarque sur la création de la variable "temps-depuis-contamination" 

Pour créer cette variable voir la partie 4 de l'étape 1 avec :

  • nom de la variable : temps-depuis-contamination

  • case à cocher : Pour ce sprite uniquement

3

2020-05-06 16_55_17-Microsoft Edge.png

Etape 5 - Comptabiliser les malades

Etape 5

1

Lors de la simulation, on souhaite comptabiliser le nombre de malade de deux façons :

  • Le nombre actuel de malade

Lorsqu'une personne devient malade alors on ajoute 1 à ce nombre. Si une personne guérit on soustrait 1.

  • Le nombre total de malade

Lorsqu'une personne devient malade alors on ajoute 1 à ce nombre. Si une personne guérit le nombre n'est pas modifié.

Pour comptabiliser les malades : 

  1. Comprendre le principe du comptage

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

2

 Création des variables 

 

Deux variables seront créées :

  • "Nombre de malade"

  • "Nombre total de malade"

 

Pour créer ces deux variables voir la partie 4 de l'étape 1. Pour les deux variables il faudra cocher la case "Pour tous les sprites".

 Initialisation des variables 

 

Ces deux variables devront être initialisées, c'est à dire qu'il faut leur donner la valeur 0.

Cette initialisation doit se faire en tout début de programme, à la suite de l'événement "Quand le drapeau vert est cliqué".

 Modification des variables 

  • Variable "Nombre de malade"

Chaque fois qu'un clone devient malade il faut incrémenter

cette variable c'est à dire lui ajouter 1 à sa valeur. 

L'instruction suivante doit être utilisée :

Attention, il ne faut pas oublier le patient 0.

Chaque fois qu'un clone est  guéri il faut décrémenter

cette variable c'est à dire lui retirer 1 à sa valeur. 

L'instruction suivante doit être utilisée :

 

  • Variable "Nombre total de malade"

Chaque fois qu'un clone devient malade il faut incrémenter

cette variable c'est à dire lui ajouter 1 à sa valeur. 

Attention, il ne faut pas oublier le patient 0.

 Affichage des variables 

Les valeurs de ces deux variables doivent être affichées dans la scène.

Voir la remarque de l'étape 1.

2020-05-09 12_34_45-Microsoft Edge.png
2020-05-09 12_34_21-Microsoft Edge.png

3

A toi de réfléchir

question.jpg

Etape 6 - Afficher le nombre maximal de malades

Etape 6

Pour afficher le nombre maximal de malades : 

  1. Comprendre le principe du nombre maximal

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

On souhaite comptabiliser et afficher le nombre maximum de personnes malades en même temps.

Ce nombre maximum est une information importante car c'est ce nombre qui peut saturer les capacités hospitalière.

1

2

 Création de la variable 

 

Une variable doit être créée :

  • "Nombre Max de malade"

 

Pour créer cette variable voir la partie 4 de l'étape 1. Pour cette variable il faudra cocher la case "Pour tous les sprites".

 Initialisation de la variable 

 

Cette variable doit être initialisée, c'est à dire qu'il faut lui donner la valeur 0.

Cette initialisation doit se faire en tout début de programme, à la suite de l'événement "Quand le drapeau vert est cliqué".

 Modification de la variable 

La variable "Nombre de malade" correspond au nombre de malade à chaque instant. Suivant les simulations, ce nombre augmente en partant de 1 puis diminue. La valeur de la variable "Nombre Max de malade" doit suivre ce nombre mais elle doit garder la valeur maximale atteinte lorsque le nombre de malade diminue.

 

Solution logicielle possible :

Chaque fois qu'un clone devient malade (lorsqu'il touche la couleur orange) il faut comparer les deux variables "Nombre de malade" et  "Nombre Max de malade".

Si "Nombre de malade" > "Nombre Max de malade"

Alors il faut affecter à la variable "Nombre Max de malade" la valeur de la variable "Nombre de malade"

 

Lorsqu'un clone guéri alors le nombre de malade diminue, il n'y a donc aucune modification à apporter à la variable "Nombre Max de malade".

 

 Affichage de la variable 

La valeur de cette variable doit être affichée dans la scène.

Voir la remarque de l'étape 1.

3

A toi de réfléchir

question.jpg

Etape 7 - Confiner les malades

Etape 7

Pour confiner les malades : 

  1. Comprendre le principe du confinement

  2. Comprendre la solution logicielle retenue

  3. Modifier et compléter le programme

Une personne contaminée peut être détectée à partir d'un certain temps (apparition de symptômes puis détection par des analyses). La personne détectée doit alors être confinée. Dans le simulateur le confinement se traduit par un arrêt de déplacement de la personne. En revanche les personnes saines continuent de se déplacer et peuvent entrer en contact avec une personne confinée.

1

2

 Remarque : 

L'explication qui suit est donnée pour le lutin "Personne".

Mais il faut bien comprendre que toutes les actions effectuées sur ce lutin "Personne" se feront aussi sur chaque clone.

 Explication : 

Le lutin "Personne" (donc chaque clone) doit avoir une variable supplémentaire appelée "confiné".

Cette variable doit être créée uniquement pour le lutin "Personne".

Cette variable "confiné" pourra avoir deux valeurs possibles : "oui" et "non" (c'est donc une variable logique).

La valeur de cette variable permettra de conditionner le déplacement du lutin dans le bloc sous-programme "Bouger".

2020-05-20 11_53_45-Scratch Desktop.png
2020-05-20 11_51_44-Scratch Desktop.png

 Remarque sur la création de la variable "confiné" 

Pour créer cette variable voir la partie 4 de l'étape 1 avec :

  • nom de la variable : confiné

  • case à cocher : Pour ce sprite uniquement

Lorsqu'une personne guérit, elle ne doit plus être confinée. Il faut donc affecter la valeur "non" à la variable "confiné".

L'instruction ci-contre doit donc être ajoutée dans le bloc sous-programme "Tester-contaminé" au bon endroit.

2020-05-20 11_54_21-Scratch Desktop.png

Le confinement d'une personne doit se faire lorsqu'elle est contaminée depuis un certain délai. Ce délai sera fixé par une nouvelle variable nommée "Détection". Cette variable doit être commune à tous les lutins (clones).

2020-05-20 11_54_21-Scratch Desktop.png

Cette variable "confiné" doit être initialisée à la valeur "non" dans le bloc "Quand je commence comme un clone".

Cette variable "confiné" doit aussi être initialisée à la valeur "non" dans le bloc sous-programme "Patient 0".

En effet le patient 0 ne doit pas être confiné dès le début puisqu'il n'a pas encore été détecté.

2020-05-20 15_50_48-Scratch Desktop.png

 Remarque sur la création de la variable "Détection" 

Pour créer cette variable voir la partie 4 de l'étape 1 avec :

  • nom de la variable : Détection

  • case à cocher : Pour tous les sprites

La variable "temps-depuis-contamination" (déjà créée) donne une information sur la durée de contamination du lutin "Personne". Pour savoir si l'on doit confiner le lutin il suffit de comparer la valeur de la variable "temps-depuis-contamination" à la valeur de la variable "Détection".

On aura donc le test et son action associée suivant :

Si "temps-depuis-contamination" est supérieur à "Détection"

Alors mettre "confiné" à "oui"

Ce test et son action associée sera placé dans le bloc sous-programme "Tester-contaminé" juste avant le test sur la guérison.

 Remarque sur la variable "Détection" : 

La variable "Détection" sera initialisée à partir de la scène. Pour cela il faut :

  1. Afficher la variable dans la scène

  2. Sélectionner le mode "Barre de défilement"

  3. Modifier l'intervalle du curseur

Pour afficher des variables dans la scène, il suffit de les cocher dans la liste de variable.

Cocher la variable "Détection".

 

Cocher aussi les variables :

  • "Nombre Max de malade"

  • "Nombre total de malade"

 

Il est inutile d'afficher les autres variables

2020-05-20 16_19_10-Scratch Desktop.png

1

Clic droit sur la variable affichée dans la scène puis sélectionner "barre de défilement"

2020-05-20 16_20_36-Scratch Desktop.png

2

3

2020-05-20 16_21_06-Scratch Desktop.png

Clic droit sur le curseur puis sélectionner "change slider range".

Modifier alors les valeurs extrêmes du curseur :

  • minimum :1

  • maximum : 100

2020-05-20 16_22_56-Scratch Desktop.png

3

A toi de réfléchir

question.jpg
bottom of page