pl
![]() |
![]() |
![]() |
Le but du projet de cette année est de vous faire faire une modeste incursion dans les univers de :
Votre objectif sera de simuler la cohabitation de lézards et de scorpions dans un "écosystème". Les scorpions se nourissent de lézards qui se nourissent de cactus.
Ceci se fera :
Une description plus détaillée des modèles et techniques employés 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.
L'environnement à simuler est peuplé d'«animaux», ici en l'occurrence de lézards et de scorpions.
Ces derniers sont des automates se déplaçant sur un terrain bi-dimensionel en quête de nourriture. Le terrain contient par endroit des sources de nourriture pour les lézards. Les scorpions, quant à eux, se nourissent de lézards2.
Les animaux se déplacent aléatoirement dans l'environnement. Si une source de nourriture est présente dans leur champ de vision, ils s'y dirigent et la consomment.
Ils ont une durée de vie limitée et meurent s'il viennent à manquer de nourriture.
Ils peuvent par ailleurs se reproduire et sont suffisamment intelligents pour tenter de fuir les prédateurs qui les traquent (s'ils en ont).
La simulation à l'échelle des populations permettra, entre autres, de visualiser l'évolution du nombre d'individus de chaque type au cours du temps en fonction de divers paramètres modifiables (nombre de prédateurs et de proies intialement présents, quantité de nourriture disponible, caractéristiques du champs de vision, facultés liées à la reproduction et à la fuite etc.)
L'environnement sera visualisé comme un terrain rectangulaire en deux dimensions. Il sera cependant géré comme un monde torique : les animaux dépassant les limites du monde par un côté réapparaîtront sur le côté opposé.
L'utilisateur pourra interagir avec la fenêtre visualisant la dynamique des populations : en cliquant sur une touche, la simulation basculera à l'échelle de l'individu. A cette échelle, votre programme simulera les mécanismes de la prédation à un niveau plus fin.
Pour simuler plus finement les mécanismes liés à la prédation chez le scorpion, nous adopterons les hypothèses suivantes :
Selon le modèle de [5], chaque senseur est relié à un neurone :
Lorsque les ondes émises par une proie atteignent un senseur, celui-ci transmet un signal au neurone auquel il est connecté. Un signal d'inhibition est aussi envoyé à un neurone connecté à un senseur de l'autre côté de l'animal. Ainsi, lorsque les fronts d'onde en se propageant atteignent les senseurs du scorpion qui sont les plus éloignés de la proie, les neurones liés à ces derniers auront une chance plus faible d'être activés. Le modèle mathématique calcule de cette façon les chances d'activer un neurone en fonction du moment auquel il a reçu le signal. Un calcul de l'angle de rotation du scorpion est ensuite fait en fonction des chances d'activation de l'ensemble des neurones.
Le but du projet est donc de :
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).
Le programme minimal devra permettre de visualiser le cycle de vie complet des animaux et le mécanisme permettant au scorpions de localiser ses proies grâce au modèle neuronal décrit ci-dessus.
Une façon simple de simuler l'évolution du système à l'échelle de la population consiste à invoquer en boucle la mise à jour de la faune. Chaque itération correspondra à un cycle de simulation.
La boucle principale de la simulation à l'échelle de la population revient à parcourir l'ensemble des animaux présents pour en gérer les actions nécessaires à chaque cycle (déplacement, reproduction, consommation de nourriture etc..).
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 animaux seront gérés les uns 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éfaste2. 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 évènements à gérer. Cela peut par exemple se faire en insérant au hasard tout nouvel entrant et/ou en ajoutant une tâche «mélanger les animaux à gérer» à chaque cycle de simulation
Pour la simulation à l'échelle de l'individu, chaque cycle de simulation invoque la mise à jour du déplacement du scorpion. Ceci se fera en fonction de l'état d'activation de ses neurones, lequel dépend des vibrations perçues.
Et voici pour finir quelques pistes d'extension possibles :
introduire de nouveaux éléments dans la faune ou la flore (prédateurs de scorpions par exemple) ;
introduire des éléments de suivi d'un individu en particulier (nombre de descendants, nombre de proies consommées 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 pour pouvoir relancer la simulation plus tard ;
etc ..
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 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 26 mai à midi
La séance de TP du mardi 27 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 :
Mise en place et classe utilitaire
Simulation d'animaux abstraits capables de se déplacer aléatoirement et de se diriger vers des cibles
Simulation du cycle de vie des animaux
Simulation du modèle neuronal du scorpion
Statistiques de simulation et 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 2 Début des inscriptions au projet 4 Lecture de la description du projet 5 Lecture de l'énoncé | première classe utilitaire 6+7 Promenades au hasard 8+9 Cycles de vie 10+11 Modèle neuronal du scorpion 12 Statistiques 13 Finalisation et préparation du rendu 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
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, 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. [1] Dynamique des populations (Wikipedia) [2] La simulation multi-agent J. Ferber, Université de Montpellier II [4] Équations de Lotka-Volterra (Wikipedia) [5] Theory of Arachnid Prey Localization, Phys. Rev. Lett. 84, 2000, W. Stürzl, R. Kempter, et J. L. van Hemmen [6] The time of sands, Nature [7] Vibration Sensitivity and a Computational Theory for Prey-Localizing Behavior in Sand Scorpions, P.H Brownel et J.L. van Hemmen, American Biologist, 41(5) [8] Application of arachnid prey localisation theory for a robot sensorimotor controller, Neurocomputing 74, S.V. Adams et al.
Fin des inscriptions au projet
extensions libres
5. Conseils
6. Références
Notes