Simulation de population
Qualité de Développement - R5.A.08
Le thème de ce TP est d’améliorer une preuve de concept de simulation de population.
L’objectif de cette simulation de population est à terme d’évaluer l’influence de mesure sanitaires sur l’évolution d’une épidémie.
Vous trouverez un prototype dans cette archive.
Vous devriez être en mesure de compiler puis lancer l’exécutable en lançant la commande cargo run
dans un terminal à l’intérieur du projet.
La première compilation peut prendre un peu de temps puisque qu’elle requiert l’installation des bindings Rust de la bibliothèque SFML.
Vous devriez obtenir une fenêtre semblable à ceci :
Première impression
En examinant le code, remplissez le document "EvaluationQualite.md" qui se trouve dans le projet. Vous devrez l’ajouter à votre Git, il sera évalué.
Améliorations attendues
Structuration
Organisez les données et leurs méthodes, sans hiérarchie de classe puisqu’il n’y a pas d’héritage en Rust, mais à l’aide de modules.
Une proposition de hiérarchie de modules est représentée ci-dessous :
Vous n’aurez pas besoin des "Traits" pour obtenir une structure déjà cohérente. Vous pouvez vous référer au support de cours sur la structuration pour construire votre hiérarchie de modules.
À ce stade, laissez la partie "graphique" (sfml) dans le main.
Structures de données
Commencez par déclarer les structures de données dont vous aurez besoin.
Fonctions
En utilisant la méthodologie TDD, implémentez les fonctions dont vous aurez besoin.
À ce stade vous devez avoir obtenu le même fonctionnement que le prototype mais avec une qualité de code bien meilleure.
Pensez à commiter et pousser votre travail.
C’est une bonne idée de faire un "tag" sur cette version (ce commit)
Épidémie - Propagation
Ne commencez pas cette partie tant que vous n’avez pas terminé la partie précédente.
Comme première amélioration et toujours en mode TDD, faites en sorte que l’état des individus évolue en fonction de :
-
Leur état courant
-
L’état des autres individus dans un rayon de contamination
-
Une probabilité de contamination
-
Une probabilité de survie
Commitez, poussez et taguez cette version.
Production de résultats
Maintenant que vous avez une première version de simulation il est temps de produire des résultats. Faites en sorte de produire des fichiers de log contenant les différentes données intéressantes.
Vous choisirez le format du fichier judicieusement pour pouvoir générer des graphs.
Configuration depuis un fichier
Ajoutez la possibilité de configurer la simulation à partir d’un fichier. Choisissez un format de fichier pour lequel des parseurs existent, json est un bon exemple a priori.
Mesures sanitaires globales
Ajoutez la possibilité d’activer des mesures sanitaires globales :
-
Port du masque : influence la probabilité de contamination lorsque des individus sont à proximité.
-
Vaccination : influence sur la probabilité de contamination et sur la probabilité éde décès.
Comportements individuels
Afin de pouvoir évaluer l’impact de mesures sanitaires s’appliquant aux individus comme le télé-travail ou la restriction des contacts sociaux à un groupe restreint, vous allez ajouter un comportement individuel de déplacement aux individus.
Ajout de lieux particuliers dans l’environnement
Vous ajouterez dans l’environnement différents types de lieux :
-
Domicile
-
Travail
-
Magasins
-
Lieu publique
-
École (pour certains individus)
Vous ferez ensuite en sorte que les individus possèdent une liste de lieux et naviguent entre ces lieux pour simuler les croisements plus fréquents que lors de déplacements aléatoires. Procédez de manière incrémentale.
Mesures sanitaires liées aux déplacements
Ajoutez la possibilité d’activer des mesures sanitaires liées aux déplacements :
-
Télétravail, les individus ne vont plus au travail.
-
Confinement : seuls quelques individus vont au travail, les écoles sont fermées, les fréquences de déplacement sont réduites.
Évaluation
L’ordre des critères est pertinent : un code de meilleure qualité mais avec moins de fonctionnalités sera plus valorisé lors de l’évaluation.
Extensions "bonus" suggérées
Si vous avez terminé les fonctionnalités attendues avec un niveau de qualité satisfaisant, vous pouvez proposer des améliorations de la simulation.
Vous pouvez par exemple travailler sur :
-
La génération de graphs à partir des données produites (cf. plotters).
-
L’amélioration de l’aspect graphique de la simulation.
-
La possibilité de lancer la simulation en mode "headless", sans l’affichage graphique.
-
La parallélisation de la simulation, notamment en ce qui concerne la simulation des comportements individuels.