|
Wolf Sheep PredationDynamique des populations entre proies et prédateurs
Version 1 :Des loups et des moutons errent au hasard dans un paysage, les loups essayant dattraper 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 nen ont plus, ils meurent.Chaque espece a une probabilité de reproduction fixe a chaque step. Dans cette version, lherbe nest pas un facteur limitant pour les moutons. Par conséquent, les moutons ne gaspillent pas dénergie en se déplacant, ni ne la récuperent en broutant. Cette version produit une dynamique intéressante mais instable. Ce modele illustre la dynamique dun systeme 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 meme que dans la version 1. Par contre ici les moutons mangent de lherbe pour gagner de lénergie, et en perdent lors de leur déplacement. Quand leur énergie sépuise, ils meurent.Une fois broutée, lherbe se régénere au bout dun certain temps. Bien que cette version soit plus complexe, elle est plus stable et ressemble davantage aux modeles classiques tels que celui de Lotka Volterra, qui sous-estime la forte probabilité dextinction dans le cas de petites populations. Ici, un SMA donne des résultats plus réalistes. (Voir Wilensky & Rand, 2015 ; chapitre 4). Description du modeleA partir de la description succincte ci-dessus, mais aussi de lanalyse du code du modele, nous avons généré plusieurs diagrammes UML.Voici le diagramme de classe : ![]() Diagramme de classe du modele 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 nen ont plus, ils meurent. Chaque loup a une probabilité fixe de reproduction a chaque step". Voici la traduction en diagramme dactivité :
![]() Diagramme dactivite du loup et du mouton (pour la version 1) Diagramme de séquence pour la version 1 : ![]() Résultats pour la version 1 :
![]() Comme lexplique Wilensky, cette version produit une dynamique instable : soit la disparition des loups et lexplosition démogaphique des moutons (car pas de limite) : courbes de gauche (dans Netlogo), soit la disparition dabord des moutons, suivie par celle des loups qui nont plus rien a manger : courbes de droite (dans Cormas). Version 2Le diagramme de classe et les activités du loup sont identiques. Les activités du mouton sont maintenant semblables a celles du loup :
Diagramme de séquence pour la version 2 : ![]() Résultats pour la version 2 : une réplication incorrecte
![]() Résultats des deux implémentations : a gauche, version originale sous Netlogo, a droite, réplication sous Cormas. Pour la version 2, on note une stabilisation des dynamiques, qui fluctuent mais ou 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 dou venait cette différence importante. Analyse des différentes implémentationsLa description textuelle du modele et sa traduction en diagrammes de classe ne permettent pas dobtenir deux implémentations convergentes. Il a donc fallu comprendre dou venait cette différence. Apres 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 dun mouvement aléatoire sappelle #randomWalk : elle permet a un agent de bouger de sa cellule vers une des 8 cellules voisines prise au hasard. Cela ressemble donc a un mouvement brownien. Dans le cas de limplémentation de ce modele sous Netlogo, le mouvement sécrivait de la facon suivante :![]() Ici, chaque agent (turtle) se déplace dune cellule, mais en modifiant sa direction de + ou - 50°. Cela entraine un mouvement plus orienté quun 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 systeme. Ce mouvement orienté a été réimplémenté dans la version sous Cormas. Il a fallu rajouté un attribut "direction" aux agents qui, a linitialisation, contient une valeur aléatoire entre 0° et 360°, ainsi quun attribut "maxDeviation" valant 50°. Avec ces modifications, nous obtenons des résultats semblables : ![]() Dans la meme idée, nous avons modifié le modele original sous Netlogo afin dintégrer le mouvement brownien: ![]() Nous obtenons alors des dynamiques semblables a la 1ere implémentation sous Cormas : ![]() Voici donc la version correcte du diagramme de classe qui prend en compte les déplacements orientés : ![]()
|
|