|
Wolf Sheep
Predation
Dynamique des populations entre proies et prédateurs
Moira Zellner (University of Illinois, mzellner@uic.edu),
Pierre Bommel (Cirad, bommel@cirad.fr)
Objectif
Il s'agit de la réplication dans Cormas d'un
modèle "démo" de la librairie de Netlogo : http://ccl.northwestern.edu/netlogo/models/WolfSheepPredation(DockedHybrid).
Selon les mots de Wilensky, U. (2005), ce modèle
explore la stabilité des systèmes
prédateurs-proies. Ces systèmes sont instables
s'ils tendent à entraîner l'extinction d'une ou de
plusieurs espèces. A l'opposé, un système stable
tend à se maintenir dans le temps malgré les
fluctuations de la taille des populations.
Ce modèle propose deux variantes principales : |
 |
Version 1 :
Des loups et des moutons errent au hasard dans un paysage,
les loups essayant d'attraper des moutons. A chaque
itération (step), un loup perd de l'énergie et doit manger
des moutons pour la récupérer. Quand ils n'en ont plus,
ils meurent.
Chaque espèce a une probabilité de reproduction fixe à
chaque step.
Dans cette version, l'herbe n'est pas un facteur limitant
pour les moutons. Par conséquent, les moutons ne
gaspillent pas d'énergie en se déplaçant, ni ne la
récupèrent en broutant. Cette version produit une
dynamique intéressante mais instable. Ce modèle illustre
la dynamique d'un système riche en nutriments, comme deux
souches bactériennes dans une boîte de Pétri (Gause,
1934).
Version 2 :
Le comportement des loups est le même que dans la version
1. Par contre ici les moutons mangent de l'herbe pour
gagner de l'énergie, et en perdent lors de leur
déplacement. Quand leur énergie s'épuise, ils meurent.
Une fois broutée, l'herbe se régénère au bout d'un certain
temps.
Bien que cette version soit plus complexe, elle est plus
stable et ressemble davantage aux modèles classiques tels
que celui de Lotka Volterra, qui sous-estime la
forte probabilité d'extinction dans le cas de petites
populations. Ici, un SMA donne des résultats plus
réalistes. (Voir Wilensky & Rand, 2015 ; chapitre 4).
Description du modèle
A partir de la description succincte ci-dessus, mais aussi
de l'analyse du code du modèle, nous avons généré
plusieurs diagrammes UML.
Voici le diagramme de classe :

Diagramme de classe du modèle pour la version 2.
Version 1
"A chaque itération les loups perdent de l'énergie, et ils
doivent manger des moutons pour la récupérer.
Quand ils n'en ont plus, ils meurent. Chaque loup a une
probabilité fixe de reproduction à chaque step". Voici la
traduction en diagramme d'activité :

Diagramme d'activite du loup et du mouton (pour
la version 1)
Diagramme de séquence pour la version 1 :

Résultats pour la version 1 :

Comme l'explique Wilensky, cette version produit une
dynamique instable : soit la disparition des loups et
l'explosition démogaphique des moutons (car pas de limite)
: courbes de gauche (dans Netlogo), soit la disparition
d'abord des moutons, suivie par celle des loups qui n'ont
plus rien à manger : courbes de droite (dans Cormas).
Version 2
Le diagramme de classe et les activités du loup sont
identiques. Les activités du mouton sont maintenant
semblables à celles du loup :
|
"Les moutons se nourrissent d'herbe pour gagner de
l'énergie et en perdent à mesure qu'ils bougent.
Quand leur énergie s'épuise, les moutons meurent.
Une fois mangée, l'herbe se régénère au bout d'un
certain temps."

Diag. d'état-transition de l'herbe.
Diagramme d'activité du mouton pour la version
2.
|
Diagramme de séquence pour la version 2 :

Résultats pour la version 2 : une réplication
incorrecte

Résultats des deux implémentations : à gauche,
version originale sous Netlogo, à droite, réplication
sous Cormas.
Pour la version 2, on note une stabilisation des
dynamiques, qui fluctuent mais où les deux populations se
maintiennent.
Par contre, les résultats différent entre les deux
plateformes : dans la version originale sous Netlogo
(graphe de gauche), on note une moyenne de 150 moutons et
de 75 loups. Dans la version sous Cormas (graphe de
droite), il y a 200 moutons en moyenne pour moins de 20
loups. Il était donc nécessaire de comprendre d'où venait
cette différence importante.
Analyse des différentes implémentations
La description textuelle du modèle et sa traduction en
diagrammes de classe ne permettent pas d'obtenir deux
implémentations convergentes. Il a donc fallu comprendre
d'où venait cette différence. Après anaylse du code de
Netlogo, nous avons compris que la différence provenait
essentiellement du mouvement aléatoire des agents. Dans le
cas de Cormas, la méthode prédéfinie d'un mouvement
aléatoire s'appelle #randomWalk : elle permet à un agent
de bouger de sa cellule vers une des 8 cellules voisines
prise au hasard. Cela ressemble donc à un mouvement
brownien. Dans le cas de l'implémentation de ce modèle
sous Netlogo, le mouvement s'écrivait de la façon suivante
:

Ici, chaque agent (turtle) se déplace d'une cellule, mais
en modifiant sa direction de + ou - 50°. Cela entraine un
mouvement plus orienté qu'un simple mouvement brownsien.
Cette procédure qui n'était pas décrite dans le texte a
des conséquences importantes sur la dynamique globale du
système.
Ce mouvement orienté a été réimplémenté dans la version
sous Cormas. Il a fallu rajouté un attribut "direction"
aux agents qui, à l'initialisation, contient une valeur
aléatoire entre 0° et 360°, ainsi qu'un attribut
"maxDeviation" valant 50°. Avec ces modifications, nous
obtenons des résultats semblables :

Dans la même idée, nous avons modifié le modèle original
sous Netlogo afin d'intégrer le mouvement brownien:

Nous obtenons alors des dynamiques semblables à la 1ère
implémentation sous Cormas :

Voici donc la version correcte du diagramme de classe qui
prend en compte les déplacements orientés :

- Télécharger le modèle WolfSheepPredation
pour Cormas, ainsi que la version
modifiée pour Netlogo. Le fichier UML
sous Astah
- Pour en savoir plus, contactez les auteurs.
A noter que le modèle sous Cormas propose 2 versions :
une version standard (WolfSheepPredation.pst) et une
version avec des diagrammes d'activité
(WolfSheepPredation_ActivDiag.pst) :
|
|