Prev Section 5.3: Structure–type d’un modèle NetLogo Up Chapitre 5: Développer un MMA avec NetLogoSection 5.5: Application : Dynamiques des stratégies dans l’oligopole de Cournot Next
5.4 Un premier exemple : un modèle simpliste de prédateur–proie
Nous allons développer un modèle très simple avec des moutons se déplaçant sur une prairie (le Monde) et se nourrissant d’herbe présente sur des patches de couleur verte (qui forment les endroits de la prairie avec de l’herbe). Le modèle contiendra les éléments suivants :
un nombre initial de moutons, nombre-moutons(*);
l’herbe repousse de manière aléatoire sur les patches : chaque patch devient vert avec une probabilité donnée, probRepousseHerbe(*);
chaque mouton mange l’herbe qui existe sur le patch sur lequel il se trouve. Une fois l’herbe mangée, le patch devient noir et le mouton récupère une certaine quantité d’énergie, energieManger(*), correspondant à la richesse du sol de la prairie ;
les moutons se déplacent aléatoirement dans la prairie : à chaque période, le mouton fait un pas dans une direction choisie aléatoirement et ce déplacement lui coûte une unité d’énergie (l’énergie nécessaire pour faire un pas est par conséquent l’unité de compte de cette «économie» énergétique);
les moutons qui ont assez d’énergie pour le faire mettent au monde un agneau et le bébé récupère de son parent (pour simplifier, nous allons considérer une reproduction non-sexuée) la quantité d’énergie nécessaire à sa naissance energieNaissance(*) ;
les moutons qui n’ont plus d’énergie meurent.
Les prédateurs ici seront les moutons et la proie, l’herbe qui pousse sur les patches. Les tutoriels de NetLogo contiennent un exemple plus complet avec des loups et des moutons. Ici, nous aurons besoin d’un seul type d’agents : les moutons.
Note : Nous indiquons par (*) les paramètres qui doivent être fixés dans l’interface graphique.
Nous allons maintenant développer ce modèle très simple en suivant la structure-type qui a été présentée dans la section 5.3↑.
nbMoutons ; le nombre de moutons vivants à cette période
herbe ; le nombre de patches avec de l’herbe
]
Nous aurons aussi des variables fixées dans l’interface qui seront de ce fait des variables globales (voir ci-dessous).
Nous devons déclarer le seul type d’agents que nous avons dans ce modèle :
breed [moutons mouton]
et déclarer les caractéristiques de chaque mouton :
moutons-own [energie]
Chaque mouton a un niveau d’énergie. Nous aurions pu aussi donner une quantité d’herbe à chaque patch, qui aurait pu augmenter grâce à la epoudde de l’herbe et diminuer quand un mouton en mange
patches-own [herbe]
mais pour simplifier nous allons supposer que le mouton mange toute l’herbe disponible sur le patch et quand l’herbe repousse, tout le patch devient vert à nouveau. Remarquons que nous n’avons pas besoin de déclarer les patches comme des agents car ils sont créés par NetLogo dès la création du Monde.
Nous allons préparer le modèle pour l’exécution grâce à la procédure setup qui sera exécutée par le bouton «Setup» que nous allons inclure dans l’interface graphique.
to setup
; Reinitialiser tous les agents, le monde
; et les variables
clear-all
; On met les ticks à 0
reset-ticks
; (procedure) initialiser les patches
setup-patches
; (procedure) initialiser tous les moutons
setup-moutons
end
Nous allons initialiser les patches en mettant de l’herbe sur tous. Chaque patch contient une variable par défaut pcolor (patch color) qui correspond à sa couleur que nous allons demander aux patches de la fixer à la couleur verte :
to setup-patches
ask patches [ set pcolor green ]
end
Remarque : Netlogo nous facilite la vie en créant un ensemble d’agents patches qui nous permet de leur parler.
Nous devons maintenant créer et initialiser nos moutons dans la commande setup-moutons :
Les moutons se placeront aléatoirement dans le Monde grâce aux coordonnées aleatoires obtenues par les instructions NetLogo correspondantes :
setxy demande à l’agent de fixer ses coordonnes dans le Monde;
random-xcor va fournir à l’agent une coordonnée aléatoire, compatible avec la structure du Monde;
random-ycor va fournir à l’agent une coordonnée aléatoire, compatible avec la structure du Monde.
Le nombre initialement fixé de moutons sont créés et placés dans le Monde formé de patches qui contiennent tous de l’herbe au début de la simulation. Les moutons pourrons maintenant vivre dans cet environnement de période en période.
Les opérations qui vont se répéter de période en période sont définies dans la commande go :
to go ; execution par le bouton »Go!« tant qu’il est enfonce
if ticks >= 500 [ stop ] ; arret apres 500 periodes
bouger-moutons ; (commande a ecrire)
manger-herbe ; (commande a ecrire)
verifier-morts ; (commande a ecrire)
reproduction ; (commande a ecrire)
set nbMoutons count moutons ; on compte le nombre de moutons en vie
repousser-herbe ; (commande a ecrire)
set herbe count patches with [pcolor = green]
; On compte la quantite d’herbe
tick
; On incremente la periode pour aller a la periode suivante
end
Pour compléter le modèle nous devons écrire toutes ces commandes (voir ci-dessous).
NetLogo vient avec des outils très commode pour créer une interface graphique permettant de fixer les paramètres et conditions initiales du modèle et pour observer son évolution en temps réel. On peut ainsi ajouter à l’interface des champs d’entrée dans lesquelles nous allons pouvoir mettre la valeur de la variable correspondant ou des curseurs pour contraindre les valeurs que peut fixer l’utilisateur (on définit alors le minimum, le maximum et le pas que doit faire la valeur à chaque cran du curseur). On peut appeler des procédures grâce aux boutons sur lesquels peut cliquer l’utilisateur (il en faut en général au moins deux : un pour setup et un pour go). On peut inclure des «moniteurs» qui permettent de lire la valeur d’une variable pendant l’exécution du modèle, ainsi que des graphiques pour en observer l’évolution dans le temps. On peut aussi étudier l’évolution de la distribution d’une caractéristique de agents grâce à un histogramme.
Pour notre modèle, nous devons créer l’interface graphique avec au moins (voir Figure 5.3↓) :
un champ pour fixer le nombre initial de moutons (nombre-moutons);
un champ pour fixer chacun des autres paramètres ;
un bouton »Setup « pour lancer l’initialisation (la commande setup);
un bouton »Go!« pour exécuter une période du modèle (la commande go);
On peut compléter ces éléments par des graphiques pour observer l’évolution de
la quantité de moutons à chaque période (nbMoutons);
Le code complet du modèle, contenant les autres procédures dont nous avons besoin et des commentaires détaillés peut être consultée dans le fichier NetLogo proposé sur la page web qui accompagne cet ouvrage [T] [T] http://yildizoglu.fr/livre-complexite/. Nous avons délibérément gardé ce modèle très simple, le lecteur est invité à l’enrichir librement.
5.4.6 Initialisation et actualisation des graphiques
Les graphiques pour observer l’évolution des variables se créent d’abord dans l’interface utilisateur; Depuis la version 5, NetLogo actualise automatiquement les données représentées sur les graphiques :
Les commandes d’initialisation de plot (plot setup commands) et de crayons (pen setup commands) indiquées au moment de la définition des graphiques dans l’interface sont exécutées quand les commandes reset-ticks ou setup-plots sont exécutés dans les procédures setup ou go;
Les commandes d’actualisation de plot (plot update commands) et de crayons (pen update commands) sont exécutées quand les commandes reset-ticks (dans setup), tick ou update-plots (dans go) sont exécutées.
Prev Section 5.3: Structure–type d’un modèle NetLogo Up Chapitre 5: Développer un MMA avec NetLogoSection 5.5: Application : Dynamiques des stratégies dans l’oligopole de Cournot Next