![]() |
![]() |
![]() |
Ce projet a pour but de vous faire une modeste incursion dans le domaine de la simulation de phénomènes biologiques par le biais de techniques informatiques.
Il s'agit de simuler de façon simplifiée la culture de bactéries dans des boites de Petri. Ces bactéries se déplaceront dans ces boites en quête de nutriments. Elles pourront se diviser et mourront dans certaines conditions. Elles seront également dotées de caractéristiques, comme leur vitesse de déplacement, qui pourront muter au cours du temps. La mutation de certaines caractéristiques pourra conditionner leur aptitude à survivre et à se développer. Le déplacement et la division ont un coût énergétique pour les bactéries. Ces dernières meurent lorsqu'elles atteignent un niveau d'énergie nul.
Les aspects comportementaux simulés sont inspirés de références bibliographiques citées en fin de page .
Le modèle de base considérera une seule variété de bactéries, les bactéries à flagelle unique, sans interactions directes entre elles et dont le seul lien avec l'environnement sera la consommation de nutriments; ce qui permettra d'augmenter leur niveau d'énergie. Ces bactéries auront une perception de gradients de nutriments facilitant leur accès à ces ressources.
Puis différentes extensions seront apportées comme :
L'outil que vous allez construire partira d'un modèle simplifié où le système à simuler est vu comme un ensemble de bactéries (de différents types) se mouvant dans un environnement particulier et interagissent avec des composants externes tels que (nutriments, éventuellement obstacles etc..). Vous utiliserez des techniques de simulation informatique (évolution pas à pas du système) pour obtenir un rendu visuel plausible du processus global. 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.
Il s'agit donc de réaliser un programme permettant de visualiser, par des techniques de simulation, l'évolution de population de bactéries de différents types dans différentes boites de culture. Cette évolution sera tributaire de divers paramètres comme la quantité et le placement des nutriments ou certaines caractéristiques des bactéries.
L'outil de simulation devra permettre de "jouer" interactivement sur les différents paramètres pour essayer de dégager les conditions optimales de survie et de développement.
Les bactéries se déplaceront dans un environnement (fluide) et seront en interaction avec des éléments de l'environnement (nutriments, éventuellement obstacles).
Les sources de nutriments seront considérées comme fixes dans la version de base du projet, mais pourront être amenées à devenir mobiles. Elles pourront croître en fonction de la température de la boite de culture.
Pour permettre de mettre plusieurs espèces de bactéries en compétition pour la survie dans une boite de culture, nous introduirons des bactéries dotées de facultés de mobilité particulières. Par exemple, des bactéries à grappin [3] qui différeront des bactéries à flagelle unique dans leur façon :
Des bactéries dotées de comportements de groupes [4] seront également introduites.
Les deux points les plus fondamentaux pour la simulation d'un tel système sont : le calcul du déplacement des bactéries et la gestion de leurs interactions avec leur environnement.
Pour ce qui est du déplacement, nous adopterons un modèle classique selon lequel le déplacement (d'une bactérie) est régi par une équation différentielle du type:
où v est la vitesse de déplacement et f représente est une force s'exerçant sur la bactérie lorsqu'elle occupe la position x(t) et qu'elle a la vitesse v(t): par exemple l'attraction exercée par des substances émises par d'autres bactéries.
L'une des approches classiques (voir complément mathématique [6]) consiste alors à intégrer numériquement l'équation différentielle du mouvement. Ceci permet de calculer l'évolution de la position et de la vitesse de chaque bactérie après l'écoulement d'un intervalle de temps dt. Une fois qu'une nouvelle position est calculée il faut alors simuler les interactions que ce changement de position induit sur elle et sur l'environnement (par exemple lorsqu'une bactérie devient suffisamment proche d'une source de nutriments elle pourra en consommer).
L'évolution du système au cours du temps sera donc simulée en calculant l'évolution des différentes entités (bactéries, sources de nutriments etc.) pas de temps après pas de temps. Chaque pas de temps dt correspond à un cycle de simulation.
Pour résumer, une modélisation naturelle du monde à simuler consiste à le voir comme:
Et voici pour finir quelques pistes d'extension possibles :
Un cycle de simulation consistera alors à :
L'affichage de courbes d'évolution des populations au cours du temps ainsi que des menus de paramétrage compléteront votre outil.
Le projet est à réaliser en groupe de 2 personnes au plus.
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, noms de variables, accolades, variables membres de classe, etc.) sera également prise 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 25 mai à 14h
La séance de TP du mardi 26 mai sera consacrée à la défense des projets.
Créez un sous-répertoire projet dans le répertoire ~/Desktop/myfiles/Programmation/cpp.
Tous les fichiers concernant ce projet devront se trouver dans le répertoire ~/Desktop/myfiles/Programmation/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 : Un.e assistant.e responsable («coach») sera nommé.e pour chaque binôme. Son rôle sera de vous aider de façon plus dédiée. Vous aurez notamment à lui montrer votre JOURNAL toutes les deux semaines environ. 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:
Modélisation des boites de culture et des nutriments
Bactéries à flagelle unique (déplacement)
Différenciation des nutriments
Bactéries à flagelle unique (division et mutation)
Bactéries à grappin et bactéries avec déplacement groupé
Statistiques et paramétrages
Extensions libres
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 3 Début des inscriptions au projet 4 Lecture de l'énoncé | première classe utilitaire 5 Boites de culture et nutriments 6-7 Bactéries à flagelle unique (déplacement) 8-10 Bactéries à flagelle unique (division et mutation) 11-12 Intéractions diffférenciées avec les nutriments 13 Extensions libres/ finalisation Voici 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
longs à 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, sur le forum (de façon
privilégiée), ou pendant la
séance d'appui. N'hésitez pas non plus à discuter de vos éventuelles difficultés avec votre assistant responsable ou votre enseignante. [2] "Brock Biology of Microorganisms", Madigan M., Martinko J. et Parker J., (livre)
[3] "Type IV pili and twitching motility", Mattick JS, Annu. Rev. Microbiol, 2002
[4] "Swarming motility" (comportements de groupes, Wikipedia) [5] Agent-based model (Wikipedia)
Lecture de la description du projet
Fin des inscriptions au projet
Nutriments différenciés
Bactéries à grappin
Bactéries avec déplacement groupé
Paramétrages et statistiques
5. Conseils
6. Références