Programmation orientée agents

(FMIN108-Université de Montpellier II)

Resp: Jacques Ferber,

TP 5 - Les boeufs musqués
Relation à l'environnement + machines à états finis

Dernière mise à jour : octobre 2019

 

Des boeufs musqués font face à leur seul ennemi mortel (mis à part l'homme): le loup..

On cherche à modéliser le comportement grégaire d'animaux, comme celui des boeufs musqués, qui doivent lutter contre le froid en se serrant les uns contre les autres, lutter contre des loups et se reproduire. On retrouve ce comportement aussi chez les bisons, les manchots et les éléphants de mer.

Ce TP constitue un résumé par rapport à ce que vous avez appris dans cette première moitié du module de Programmation par Agent

1. Regroupement

a) se regrouper

On veut créer un phénomène de regroupement. Pour cela on désire que les boeufs musqués soient capables de se regrouper mais sans se retrouver sur le même patche. Il est donc nécessaire qu'ils s'éloignent s'ils sont trop près et qu'ils restent à la bonne distance pour former un troupeau serré d'animaux.

Implémenter un phénomène de regroupement entre les agents à partir d'une détection des autres agents (on utilisera la primitive in-radius vue en cours et en TP). On supposera qu'ils avancent de manière aléatoire tout en cherchant à rester en contact avec les autres. On appellera cette procédure de regroupement, associée à chaque Boeuf: regrouper.Cela signifie que la procédure go-boeuf consiste essentiellement à appeler la procédure regrouper.

Visualiser le regroupement des boeufs en fonction du paramètre distance-min qui gère la distance minimale que les boeufs musqués peuvent avoir entre eux (lorsque leur distance devient inférieure à distance-min, ils se repoussent, comme des porc-épic..)

b) Chercher de la nourriture

On suppose que les boeufs musqués cherchent aussi à manger. On implémentera un système de croissance d'herbe comme pour le TP2.. On suppose que les boeufs disposent d'une variable energie qui correspond à la valeur de nourriture qu'ils consomment (paramètre consommation-herbe sous la forme d'un slider. L'herbe du patche sur lequel se trouve le boeuf perd la taille-plante correspondant à cette consommation. Voir TP2). Lorsque cette valeur descend en dessous d'une certaine valeur (energie-min), ils se mettent en quête de nourriture, et donc quittent leur groupe. Implémenter la procédure quete-nourriture qui leur fait rechercher de la nourriture.

On suppose d'autre part qu'à chaque cycle, les boeufs perdent une certaine valeur d'énergie (ceci est vrai dans tous les cas de figure et donc même pour les autres comportements que l'on développera par la suite). Cette valeur sera mise sous la forme d'un slider (conso-energie). Lorsque cette variable d'énergie arrive à zéro, les boeufs meurent.

On voit donc que les boeufs ont pour l'instant deux états: un état correspondant à l'activité regrouper, qui est activée tant que l'énergie est suffisante, et quete-nourriture qui se déclenche dès que la nourriture est faible.

Implémenter les boeufs avec ce double état.

c) Affronter les loups

On suppose maintenant qu'il existe deux types de boeufs: des enfants et des adultes (il est préférable de mettre le statut "enfant/adulte" sous la forme d'une variable d'état. On suppose aussi qu'il existe des loups qui cherchent à attaquer les boeufs. Lorsque les boeufs sont attaqués (lorsqu'un loup se trouve dans leur rayon de perception), ils arrêtent de manger et se regroupent. Mais en plus ils deviennent "bleus" (ou "vert" de trouille) pendant un temps correspondant au paramètre temps-recuperation (exprimé sous la forme d'un slider). D'autre part, pendant qu'ils ont peur les enfants fuient les loups, et les adultes font face aux loups (comme le montre la deuxième photo sur cette page).

Enfin, on suppose que les loups peuvent manger des boeufs enfants s'ils se trouvent sur la même case que l'enfant boeuf (on rappelle que la procedure die fait mourir un agent), et qu'ils ne peuvent pas avancer si un adulte se trouve devant eux (ils ne peuvent pas aller sur la case où se trouve déjà un boeuf).

Implémenter ce nouveau comportement des boeufs, en ayant présent qu'il y a maintenant un nouvel état (avoir-peur) qui traduit deux comportements différents, selon que l'on est adulte ou enfant.

d) se reproduire

On suppose maintenant que les adultes peuvent produire de nouveaux enfants, tous les temps-generation. D'autre part, les enfants peuvent devenir adulte lorsque le temps enfance est passé (mettre temps-generation et enfance sous la forme d'un compteur que l'on décrémente, comme on l'a vu pour d'autres TP). Lors de la génération d'un nouvel enfant, l'énergie du parent est divisée en deux, et l'enfant récupère la moitié de l'énergie du parent..

Mettre tout cela ensemble et ajuster les paramètres pour que votre population survive... Mais là, il n'y a plus qu'à observer..

Bravo si vous êtes arrivés jusque là...