TP 2 - Programmation orientée agent

Croissance et consommation de ressources en NetLogo

 

proposé par Jacques Ferber - Février 2008

 

 

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. Troupeaux de vaches

Faites en sorte que vos vaches se déplacent en troupeau.. Utilisez la technique que vous avez mis au point lors de la poursuite.. Faites un "taureau" et un ensemble de vaches qui le suivent (comme pour les reines et les abeilles). En même temps qu'elles avencent et suivent le taureau, elles se repaissent de l'herbe qu'elles croisent.. Voyez l'évolution de votre terrain en fonction du déplacement des vaches..

4. Prédateurs

a) On crée maintenant un ensemble de prédateurs, des lions, qui viennent manger les vaches (ils ne mangent pas les taureaux!!). Ces lions avancent de manière aléatoires, et dès qu'ils repèrent une vache dans un certain rayon de perception (de 3 à 20 par exemple, mettre cela aussi sous la forme d'un paramètre et d'un slider), ils lui foncent dessus, et s'il se trouve sur le même patche que la vache, il la mange (En NetLogo, le code other <breed>-here retourne toutes les tortues de type <breed> qui se trouvent sur le même patch, la tortue courante ayant été omise. Attention, même s'il y a plusieurs vaches sur le même patch, il ne doit en manger qu'une!! Regardez dans la doc la définition de other et de turtles-here).

Regardez ce qui se passe en fonction du nombre initial de lions et de vaches.

b) On donne maintenant des capacités de reproduction aux lions et aux vaches. On suppose d'abord qu'ils disposent tous les deux d'une variable énergie qui est décrémentée à chaque tick (à chaque pas de temps). Cette valeur est incrémentée lorsque les vaches mangent l'herbe (elles prennent un certain quota d'énergie à chaque fois qu'elles prennent de l'herbe) et lorsque les lions mangent les vaches (les lions prennent un certain quota d'énergie à chaque fois qu'ils mangent une vache). Ces quotas d'énergie correspondent à des paramètres gain-brouter pour les vaches et gain-devorer pour les lions. Leur attribut énergétique s'exprime alors sous la forme:

        set energie energie + gain-brouter   

Pour le lion à chaque fois qu'il mange une vache (idem pour la vache chaque fois qu'elle broute). On suppose qu'ils se reproduisent de manière aléatoire, ce nombre aléatoire étant pris dans l'étendue 0..reproduction-vaches pour la reproduction des vaches (et de la même manière pour les lions). On suppose aussi que la valeur énergétique d'un animal est divisée par deux lorsqu'il se reproduit.

En NetLogo, la commande hatch 1 [... ] permet de créer une copie de la tortue courante, l'enfant se trouvant au même endroit que le parent.

Jouez un peu avec les variables et observez l'évolution de votre monde dans lequel de l'herbe pousse, des vaches et des lions évoluent... A l'école des dieux, savez vous créer un monde qui perdure?