Master Informatique 2ère année:

Moteurs de simulation

Resp: Jacques Ferber

 

TP 2 - Gestion de ressources et diffusion

Fevrier 2012

 

On va essayer de modéliser un système de gestion de ressources en NetLogo.

1. Faire évoluer l'environnement

a) Dans un premier temps on va faire "pousser" des ressources dans un environnement.. Pour cela on va supposer que les patches peuvent faire pousser de l'herbe...

On supposera que chaque parcelle de terrain (représentée par un patch) peut être soit pleine d'herbe (couleur verte), soit déserte (couleur marron). On va supposer que l'herbe repousse naturellement après un certain temps. De ce fait, lorsqu'un patch est désert, il attend un certain temps, et cela repousse..

Implémenter de tels patches, de telle manière que les patches déserts repoussent au bout d'un certain temps (cela signifie que chaque patche dispose d'un compteur qui gère le temps pendant lequel un patch est désert).. On supposera que le "temps de croissance" est un paramètre que l'on doit pouvoir modifier à l'aide d'un slider.. Le principe est le suivant: on met une valeur dans le compteur et on décrémente ce compteur à chaque tick. Lorsque le compteur est arrivé à zéro, on met le patch à vert et on replace le compteur avec la valeur "temps de croissance".

Pour tester votre modèle, considérez que vous démarrez avec des patches déserts qui ont des temps de croissance différents (il faut que la valeur de ce temps soit grande car NetLogo va vite.. Sinon, tout votre terrain va devenir vert très vite). Utiliser les fonctionnalités "random" de NetLogo.

b) Ensuite, on supposera de plus que les herbes peuvent pousser sur un patch. Cela sera représenté sous la forme d'un attribut au niveau du patch (taille-plantes). Cet attribut sera incrémenté tous les "temps de croissance".. Pour visualiser on pourra utiliser la fonction scale-color de NetLogo qui retourne une couleur proportionnelle à une valeur (aller regarder sa définition dans le manuel de programmation de NetLogo). Par exemple, pour mettre la couleur d'un patche en correspondance avec la valeur de l'attribut 'taille-plante', quelque chose comme cela devrait faire l'affaire:

	set pcolor scale-color green taille-plante 0 70

Visualisez ainsi des patches qui poussent et croissent à partir de valeurs aléatoires initiales. On supposera que lorsque la valeur de l'attribut taille-plante est à zéro, le patch devient désert (et il recontinuera sa croissance ensuite).

2. Créer des consommateurs de ressources

On fait maintenant venir des vaches qui viennent brouter l'herbe. On suppose qu'une vache prend un peu de la valeur de taille-plante, c'est à dire qu'elle diminue la quantité d'herbe qui se trouve sur un patche.. Chaque fois qu'une vache tombe sur un patche vert, elle diminue sa valeur taille-plante d'une valeur consommation-vache qui est définie de manière globale (c'est un paramètre auquel on associe un slider). Evidemment l'herbe repousse ensuite.

Faites en sorte que les vaches se déplacent aléatoirement et broutent.. Voyez ce qui se passe en fonction des paramètres temps-croissance et consommation-vache.. Qui va gagner de l'herbe ou des vaches?

Visualiser la quantité totale de vaches et d'herbe à l'aide d'un moniteur d'interface de type 'plot'.

A la fin de la procédure to go, ajouter les ligne suivantes:

   tick
update-plot

et écrivez une fonction update-plot à partir du code suivant:

    to update-plot

        set-current-plot-pen "herbe"
        plot sum [taille-plante] of patches
	 end
  

Cela signifie qu'à chaque tour, il affiche dans le "plot", pour la courbe "herbe", la totalité d'herbe qui existe dans votre terrain..

3. La chasse aux lapins, ou comment il est difficile de suivre une trace d'odeur..

On reprend le modèle des poursuites réalisé dans le cadre du TP1 (les abeilles et les reines), que l'on appellera ici les lapins et les loups. On suppose que les lapins (initialement les reines) avancent en laissant une trace d'odeur dans l'environnement.

a) Ecrire le comportement de lapins qui laissent des traces d'odeur dans l'environnement en faisant attention de bien visualiser les traces des odeurs des lapins. On s'inspirera du modèle de diffusion vu en cours. Chaque patch aura un attribut odeur. Quelques valeurs de paramètres:

En ce qui concerne la diffusion, on diffusera le paramètre 'odeur' des patches à chaque tick. D'autre part, on coloriera l'environnement avec la procédure suivante:

       ask patches [set pcolor scale-color yellow odeur 1 (max-odeur / 1.3) ] 

Attention: j'ai constaté que vous avez beaucoup de difficulté pour bien placer les bons éléments au bon endroit. Dans cet exemple, le placement des odeurs est fait par les lapins, donc cela doit se trouver dans une procédure associée aux lapins. La diffusion des patches est globale sur l'ensemble du monde et se trouve définie pour les 'observers'. La coloration des patches est assurée par les patches eux-mêmes. En d'autres termes, lorsqu'un lapin dépose une odeur, il ne met pas à jour la couleur des patches. La couleur des patches est mise à jour directement dans la procédure go ou bien dans une procédure appelée par go

b) Ecrire le comportement des loups, en considérant qu'ils ont une vitesse de 0.8 à chaque tour. Les loups suivent le gradient des odeurs laissés par les lapins.

  1. Ecrire le comportement à l'aide de la primitive uphill et regardez les conséquences..
  2. Essayer d'écrire un autre comportement, plus fluide, en reprenant la définition de uphill (voir la doc de NetLogo), mais sans faire intervenir la primitive move-to (on reste avec la simple primitive fd pour avancer).

Essayez de comprendre le problème des loups qui sont souvent bloqués dans leur avancement..

c) Vous constatez que la diffusion réparti les odeurs, mais ne les supprime pas.. Au bout d'un certain temps, tout l'environnement devient rempli d'odeurs, et les loups n'arrivent plus à s'y retrouver. Ecrire un modèle d'évaporation des odeurs.. Il suffit que les patches aient leur attribut d'odeur modifié à chaque tour, juste avant la visualisation:

odeur = odeur - taux-evaporationtaux-evaporation varie de 0% à 5% environ (utiliser un slider).