Outils pour utilisateurs

Outils du site


tp:python:epidemie

📓 Propagation d'une épidémie

Dans ce TP, nous proposons de programmer un simulateur permettant d'observer la manière dont une épidémie se répand.

Propagation d'une épidémie, qui atteint le seuil de pandémie

Avant de commencer la lecture du sujet, vous devez prendre connaissance de la manière de programmer un automate cellulaire en 2D. Ce point est abordé sur la page [[stu:python:automates_cellulaires_2d|Automates cellulaires 2D : Généralités]]. Vous aurez peut être aussi besoin de vous renseigner sur les [[stu:python_gui:pygame|Graphismes en Python]]

Références

États des cellules

Les cellules peuvent être dans un des cinq états suivants : Vide1), Mort, Sain, Immunisé, Malade

Règles de transition

Les règles de transition sont :

  • Une cellule Morte reste Morte
  • Une cellule Malade devient Morte avec une probabilitĂ© p1 ou ImmunisĂ©e avec une probabilitĂ© (1-p1)
  • Une cellule ImmunisĂ©e reste ImmunisĂ©e
  • Une cellule Saine
    • devient Malade si elle a un voisin Malade avec une probabilitĂ© p2
    • reste Saine sinon

Le voisinage considéré est un voisinage de Moore (8 voisins).

Programmation

Des instructions sur la manière de procéder et sur l'ordre dans lequel créer ce programme sont données dans la documentation générale sur les automates 2D.

Les valeurs de p1 et p2 doivent pouvoir varier pour réaliser tous les tests suggérés dans la suite du TP. Pensez-y dès le début.

Spécificités de cet automate

  • Pour cette simulation, il est prĂ©fĂ©rable d'initialiser toutes les cellules du tableau dans l'Ă©tat Sain sauf une dans l'Ă©tat Malade
  • Il est utile de mettre les deux probabilitĂ©s p1 et p2 en paramètre de la fonction suivant
  • Pour dĂ©tecter la fin d'une simulation, on peut apporter une modification Ă  suivant : un flag est mis Ă  True en dĂ©but de procĂ©dure, puis, si un Ă©tat change, il passe Ă  False. S'il est encore Ă  True en fin de procĂ©dure, c'est que l'Ă©tat est stable. On pourra par exemple modifier suivant pour qu'elle retourne ce flag, indiquant ainsi si la simulation est terminĂ©e ou non.
  • Vous devrez rĂ©aliser une fonction qui comptabilise le pourcentage de cellules dans chaque Ă©tat. Pensez Ă  utiliser des dictionnaires.
  • Dans la suite, vous ĂŞtes amenĂ©s Ă  apporter des modifications : attention Ă  ce que vos fonctions ne deviennent pas trop longues ou compliquĂ©es, suite Ă  des modifications

Ne pas hésiter à remettre en question son travail et à en reprendre une partie pour la coder plus proprement. Le temps passé à faire ça est du temps gagné par la suite.

Ă€ quoi utiliser l'automate

Outre l'activité purement contemplative qui consiste à observer les changements d'états des cellules, cet automate est adapté à une étude statistique. Pour cela, vous devez pourvoir lancer plusieurs simulations (une simulation s'arrête lorsque l'automate n'évolue plus). Dans le cas de chaque simulation, comptabilisez les nombre de cellules qui sont restées saines, sont immunisées ou sont mortes. En réalisant des moyennes sur quelques dizaines de tests, vous pouvez alors mesurer le comportement moyen de l'automate, en fonction des paramètres p1 et/ou p2.

Pour p1 fixé à 0.5, à partir de quelle valeur de p2 avons nous affaire à une pandémie (c'est à dire à une contamination généralisée) ? Pour faire ce calcul vous pourrez comptabiliser le nombre de cellules mortes ou immunisées à la fin de la simulation (mais il y a d'autres moyens de procéder, si vous avez une autre idée, n'hésitez pas à la programmer) et contrôler comment varie cette valeur en fonction de p2 (voir la courbe ci-dessous)

Si on immunise (par un vaccin) 25 % des cellules dès le début (à l'initialisation), quelle est le nouveau seuil critique pour p2 ? Il vous faudra sans doute différencier les individus immunisés par vaccin de ceux immunisés suite à la maladie pour comptabiliser les cellules qui ont été atteintes. Vous pourrez le faire par exemple en ajoutant un état. Il est de plus intéressant de regarder la proportion d'individus ayant été atteints par la maladie à l'interieur de la populaiton **non vaccinée**. Vous ferez ainsi apparaître que la vaccination à grande échelle a évidemment une influence sur les individus vaccinés, mais aussi sur ceux qui ne le sont pas.

Commentez les résultats que vous avez obtenus.

Quel est, à votre avis, la simplification la plus critique faite dans ce modèle (i.e. quelle propriété améliorer en premier pour le rendre plus réaliste) ? Argumentez.

Vous pouvez essayer de produire des courbes de ce genre :

Sol

1)
l'état Vide n'est pas utilisé dans un premier temps
tp/python/epidemie.txt · Dernière modification: 2021/05/04 15:12 (modification externe)