Le but du projet de cette année est de vous faire faire une modeste incursion dans l'univers de la simulation de systèmes biologiques.
Votre objectif sera de simuler de façon très simplifiée l'impact de l'inhibition de la glycolyse sur l'évolution de tumeurs1 affectant des rongeurs (hamsters) élevés en laboratoire2. Il s'agira de "monitorer" l'évolution de la pathologie sur différents hamsters, qui recevront chacun un traitement particulier via des nutriments et des inhibiteurs.
La simulation se fera selon deux "vues" différentes :
la vue externe : très simple, où l'on simulera un petit élevage de hamsters. On pourra les sélectionner et leur administrer les différents traitements.
la vue interne : où l'on verra, pour chaque hamster, l'évolution de cellules tumorales et du réseau sanguin sur un fragment d'organe (les cellules tumorales influencent en effet le réseau sanguin selon le phénomène dit d'angiogenèse [6]).
Une description plus détaillée des éléments à simuler et des techniques employées est fournie un peu plus bas.
Au delà du domaine d'application, ce projet vous permettra d'aborder de nombreuses facettes intéressantes de la programmation:
Vous trouverez dans ce qui suit une description des hypothèses et techniques de simulation qui seront implémentées dans le cadre de ce projet, des éléments relatifs à l'organisation du travail et un certain nombre de références sur le domaine.
2. Hypothèses et techniques de simulation
Le but ici est d'introduire les éléments principaux à considérer lors de la simulation. Il ne s'agit ici que d'une description générale. L'énoncé du projet vous donnera des spécifications détaillées pour chaque étape suggérée.
La vue externe de la simulation permettra de visualiser un élevage de hamsters. Il s'agira de petits automates se déplaçant aléatoirement et capables de se nourrir. Afin d'en faciliter le repérage, chaque hamster sera confiné dans un cage qui lui est propre.
La vue interne permettra quant à elle de visualiser un fragment d'organe potentiellement atteint de tumeur pour un hamster donné. Par simplification, la nature de l'organe ne nous importera pas et l'on considérera simplement qu'il s'agit du même organe pour chaque animal. La vue interne sera échantillonnée en cases (grille en deux dimensions). Chaque case correspondra à une portion/cellule du fragment d'organe, saine ou malade, et au réseau sanguin l'irriguant.
Ce modèle très simplifié, notamment en raison du fait qu'il est seulement en deux dimensions, permettra de simuler les mécanismes suivants :
Chaque cellule de l'organe aura une durée de vie limitée, conditionnée par l'âge mais aussi par l'énergie disponible.
Le réseau sanguin sera constitué de fragments appartenant à une artère et de fragments appartenant au réseau de capillaires dérivant de cette artère. Les nutriments ne se diffuseront qu'à partir des capillaires selon une équation différentielle décrite en [7]. La création du réseau sanguin, pour chaque hamster, se fera selon un algorithme générant aléatoirement le cheminement des capillaires à partir de l'artère.
L'évolution des cellules de l'organe sera dépendante des substances suivantes :
Dans le modèle que nous vous suggérerons, les deux premières substances seront administrées comme nutriments aux hamsters, en proportions variables, afin d'en étudier l'incidence sur l'évolution de la tumeur.
Le but du projet est donc de simuler l'évolution temporelle de chaque vue, externe et interne. Il faudra bien sûr pour cela concevoir les classes/objets nécessaires et les organiser (héritage, encapsulation) de façon pertinente; ce que l'énoncé du projet vous aidera à faire.
La simulation minimale devra permettre de visualiser l'évolution du l'organe de chaque hamster en affichant des informations pertinentes (dosage des substances, pourcentage de cellules saines et malignes etc..)
Au niveau externe la simulation se fera pour tous les hamsters en même temps (on les verra se mouvoir dans leur cage). On devra alors pouvoir en sélectionner un et basculer alors sur sa vue interne qui nous montrera l'organe observé. Il sera à tout moment possible de revenir à la vue externe pour éventuellement sélectionner un autre hamster. Dans la version de base du programme, l'administration de substances se fera de façon interactive (appui des touches pour augmenter la quantité de nutriment par exemple)
Une façon simple de simuler l'évolution de chaque vue consiste à invoquer en boucle la mise à jour de ses constituants (les hamsters pour la vue externe et les cases pour la vue interne) sur un pas de temps donné. Chaque itération correspondra à un cycle de simulation. La mise à jour des hamsters dans la vue externe permettra de gérer les actions nécessaires à chaque cycle (déplacement, consommation de nourriture, fin de vie etc.). La mise à jour des cases/cellules dans la vue interne permettra par exemple de diffuser les substances.
Un inconvénient potentiel dans ce type de simulation est l'ordre de gestion des évènements. Dans la version de base que vous suggérera l'énoncé, les cases seront gérées les unes après les autres dans l'ordre de la liste, qui (à peu de choses près) est toujours le même. Cela induit en fait une synchronisation involontaire entre le système à simuler et l'«horloge de simulation» qui dans des cas plus réalistes peut être néfaste3. Pour éviter ce genre de problèmes, on pourra, dans une version améliorée, choisir de parcourir dans un ordre aléatoire la liste des entités à simuler. Cela peut par exemple se faire en insérant au hasard tout nouvel entrant et/ou en ajoutant une tâche «mélanger les cases à gérer» à chaque cycle de simulation.
Et voici pour finir quelques pistes d'extension possibles :
introduire de nouveaux traitements (par exemple : inhibition de la croissance artérielle) ;
mettre en oeuvre plusieurs modes de visualisation : courbes de croissance du nombre de cellules (cancéreuses ou pas), etc. ;
autoriser des «points de reprise» (via un fichier) : avoir un moyen, par exemple un clic de souris ou une touche, d'arrêter la simulation à un point donné et de la sauvegarder dans un fichier (au format similaire au fichier de configuration mais un peu plus compliqué pour pouvoir relancer la simulation plus tard) ;
etc ..
Le projet est à réaliser en groupe de 2 personnes.
Il y aura au cours du projet un rendu intermédiaire et un rendu final. Le rendu intermédiaire compte dans la notation finale, mais de façon relativement peu importante (un barème vous sera fourni). Il nous permet surtout de suivre votre progression.
Aucun rapport (document) n'est à fournir sur le projet. Par contre, nous vous demandons de commenter abondamment et intelligemment les codes sources que vous nous rendrez (les commentaires remplaceront le rapport et seront donc pris en compte dans la notation du projet). De plus, la propreté du code (indentation, espaces, nom de variables, accolades, variable membre de classe, etc.) sera également pris en compte dans la notation (le code fourni est considéré comme acceptable).
Nous vous demanderons également de fournir trois fichiers complémentaires :
Un fichier REPONSES répondant point par point aux questions posées pour les différentes étapes du projet. Ces réponses ne sont bien sûr pas uniques mais dépendent de la façon dont vous concevez l'énoncé. Elles serviront aux correcteurs à mieux comprendre votre conception.
En particulier, en plus des commentaires usuels sur le code lui-même, vous avez tout loisir de porter un regard critique sur la modélisation du problème, d'identifier les faiblesses et insuffisances de ce modèle, et naturellement de proposer des solutions pour pallier ces faiblesses.
La date limite du rendu final est le Lundi 27 mai à 14h00
La séance de TP du mardi 28 mai sera consacrée à la défense des projets.
Créez un sous-répertoire projet dans le répertoire cpp.
Tous les fichiers concernant ce projet devront se trouver dans le répertoire cpp/projet
Comme la programmation complète de notre projet, si simplifié soit-il, n'est pas envisageable dans les temps qui vous sont impartis, vous n'aurez pas à réaliser l'intégralité du programme. Les parties relatives à la programmation graphique seront fournies. Nous vous fournirons également au fil des semaines, dans l'énoncé du projet, un certain nombre de fichiers utilitaires. Ces fichiers vous permettront notamment de tester chaque étape de votre projet.
Les séances de TP seront principalement dédiées au projet (le corrigé des exercices peut être utilisé comme source d'information complémentaire au cours). Votre travail durant les séances de TP sera à compléter par une contribution personnelle hors de ces séances. Il s'agira essentiellement d'un travail de réflexion, en commun avec votre binôme, sur les décisions à prendre en matière de conception de votre programme et du codage qui en résulte (quoi coder? comment coder? quelles structures de données utiliser? etc...) .
Nous vous demandons de soigneusement sauvegarder votre travail à chaque étape, même incomplet, afin de pouvoir montrer régulièrement votre état d'avancement.
L'équipe du cours est bien sûr à votre disposition pour vous aider tout au long de ce projet: pendant les TPs, pendant les séances d'appui (rattrapage) et via le forum.
Coachs : Une assistante ou un assistant responsable ("coach") sera nommé pour chaque binôme. Votre coach sera là pour vous aider de façon plus dédiée que les autres assistant·es. Vous aurez notamment à lui montrer votre JOURNAL toutes les deux semaines environ et vos rendus intermédiaires. C'est avec votre coach que vous discuterez en priorité des éventuelles difficultés que vous rencontrerez. C'est par contre à un·e autre assistant·e que vous ferez la présentation finale de votre projet.
La réalisation informatique du projet comporte les grandes étapes suivantes:
Mise en place des briques de base (modélisation des substances, classes utilitaires)
Simulation de l'élevage de hamsters
Simulation du réseau sanguin
Simulation de l'évolution de tumeurs
Un
énoncé détaillé du projet complet vous sera livré, ainsi que la librairie graphique, ce qui vous permettra de travailler à
votre rythme. Le plan de travail proposé dans le tableau ci-dessous
coïncide avec le déroulement du cours, et vous donne une indication des
temps que vous devriez consacrer à chaque tâche. Très important: Ne
prenez pas trop de retard par rapport à ce plan pour ne pas être
dépassé en fin de semestre.
Semaine(s) Tâches conseillées 2 Début des inscriptions au projet 4 Lecture de la description du projet 5 Lecture de l'énoncé | premières classes utilitaires 6-8 Vue externe : élevage de hamsters 9-10 Vue interne (1) : réseau sanguin 11-12 Vue interne (2) : Organe, tumeurs et traitements 13 Améliorations/ finalisation Quelques petites astuces pour vous faciliter la vie durant le projet: Familiarisez-vous dès maintenant avec le sujet. Commencez rapidement le projet ! Réfléchissez
avant de commencer à programmer! Prenez le temps avec votre collègue de
bien réfléchir à comment coder, quelles structures de données utiliser,
etc. Cela facilitera grandement la programmation. Inspirez-vous des séries d'exercices et de leurs corrigés pour bien comprendre les concepts de base. Modularisez votre code. Commentez
votre code au fur et à mesure: il est quelque peu "ingrat" de devoir
commenter une "infinité" de lignes de codes deux jours avant les rendus et en
ne se rappelant plus trop bien ce que l'on avait voulu faire. Compilez
régulièrement. Il est plus facile de corriger 2 ou 3 fautes de syntaxe
dans quelques nouvelles lignes de code que 100 fautes dans 400 lignes
de code! Testez chaque petite fonction de votre code en écrivant des petits main
ou en mettant les autres lignes en commentaire. Cela peut sembler
inutile mais vous perdrez moins de temps en écrivant un programme de
test qu'en recherchant les causes d'erreurs au sein de nombreuses
fonctions. Utilisez des
identificateurs parlants dans votre code. Ils sont généralement plus
long à taper, mais lorsque vous reviendrez sur des parties de code
écrites plusieurs semaines auparavant, il sera plus facile de se
souvenir de ce que représentent les variables matriceDeRotation et quotient que r et q. N'hésitez
pas à poser des questions durant les TPs ou sur le forum tout au long de la semaine. N'hésitez pas non plus à discuter de vos éventuelles difficultés avec votre coach ou votre enseignante. [1] Simulating cancer growth with multiscale agent-based modeling (Wang et al., 2015) [2] https://en.wikipedia.org/wiki/Agent-based_model_in_biology [8] Glycolysis inhibition for anticancer treatment, Oncogene, 2006
Fin des inscriptions au projet
6. Références
Notes