Guide du Système Dynamique

NetLogo 4.0.4   Manuel de l'utilisateur  

Ce guide est divisé en trois parties :

Qu'est-ce que le Modélisateur de Systèmes Dynamiques de NetLogo?

Les systèmes dynamiques sont un type de modélisation où l'on essaie de comprendre comment les choses sont en relations les unes avec les autres. Cette approche est un peu différente de celle basée sur les agents qui est normalement utilisée par les modèles NetLogo.

Avec l'approche basée sur les agents, vous programmez le comportement individuel des agents et observez ce qui « émerge » de leurs interactions. Dans un modèle de prédation loups-moutons par exemple, vous fournissez des règles décrivant comment les loups, les moutons et l'herbe interagissent les uns avec les autres. Quand vous exécutez la simulation, vous observez le comportement émergeant au niveau des « agrégats « : par exemple, comment les populations de loups et de moutons évoluent au cours du temps.

Avec le modélisateur de systèmes dynamiques, vous ne programmez pas le comportement individuel des agents. Vous programmez à la place comment les populations d'agents se comportent de manière globale. Par exemple, en utilisant les systèmes dynamiques pour modéliser la prédation loups-moutons, vous spécifiez comment le nombre total de moutons sera modifié quand le nombre total de loups augmentera ou diminuera, et vice-versa. Vous lancez alors la simulation pour voir comment les deux populations évoluent au cours du temps.

La programmation du modélisateur de systèmes dynamiques se fait en dessinant un diagramme définissant d'une part les populations en causes ou "stocks" et d'autre part comment ces populations interagissent les unes avec les autres. Le modélisateur lit alors votre diagramme et génère le code NetLogo approprié  –  les variables globales, les procédures et les reporters  –  permettant de faire « tourner » votre système dynamique dans NetLogo.

Les concepts de base

Un diagramme de système dynamique est formé de quatre types d'éléments : les stocks, les variables, les flux et les liens.

Un stock est une collection de choses, un agrégat. Par exemple, un stock peut représenter une population de moutons, l'eau d'un lac ou le nombre de machines dans une usine.

Un flux (flow) transporte ces choses, remplissant ou vidant un stock. Les flux ressemblent à des tuyaux munis d'un robinet, le robinet permettant de contrôler la quantité de choses qui s'écoulent dans le tuyau.

Une variable est une valeur utilisée dans le diagramme. Elle peut être soit une équation qui dépend d'autres variables, soit une constante.

Un lien (link) permet qu'une valeur présente dans une partie du diagramme soit aussi disponible dans une autre partie. Un lien transmet un nombre d'une variable ou d'un stock à un autre stock ou à un flux.

Le Modélisateur de systèmes dynamiques calcule comment les valeurs des stocks changent au cours du temps en les évaluant encore et encore. L'estimation n'est pas toujours parfaite, mais vous pouvez influencer sa précision en changeant la valeur de dt. Quand dt diminue, les valeurs du modèle sont évaluées plus fréquemment, ce qui fait qu'il devient plus précis. Toutefois, la diminution de la valeur de dt ralentit aussi la vitesse de la simulation.

Les exemples de modèles dynamiques

La bibliothèque des modèles NetLogo "NetLogo Models Library" contient dans sa section "Sample Models" quatre exemples qui utilisent le Modélisateur de systèmes dynamiques. Ces quatre modèles explorent la croissance de populations (et, dans les modèles avec prédation, aussi les déclins de populations). Ce sont :

"Exponential Growth" (Croissance exponentielle) et "Logistic Growth" (Croissance logistique) sont de simples exemples de la croissance d'un stock.

"Wolf Sheep Predation (aggregate)" (Prédation loups-moutons (agrégat)) est un exemple de système avec de multiples stocks qui s'influencent les uns les autres. Il modélise un écosystème de prédateurs-proies en utilisant le Modélisateur de systèmes dynamiques.

"Wolf Sheep Predation (docked)" est un exemple de modèle qui fait tourner côte à côte un modèle de système dynamique et un modèle à base d'agents. En fait, il fait tourner l'implémentation en système dynamique de la Prédation loups-moutons à côté de la Prédation loups-moutons à base d'agents qui de trouve dans la section "Biology" des "Sample Models".

Comment cela fonctionne

Pour ouvrir le Modélisateur de systèmes dynamiques "System Dynamics Modeler", sélectionnez la commande "System Dynamics Modeler" dans le menu "Tools". La fenêtre "System Dynamics Modeler" s'ouvre alors.

screen shot

Le Panneau "Diagram"

Le panneau "Diagram" (diagramme) est l'endroit où dessiner le diagramme de votre système dynamique. Sa barre d'outils contient les boutons pour éditer, supprimer ou créer des éléments dans le diagramme.

Créer les éléments du diagramme

screen shot

Le diagramme d'un système dynamique est formé de quatre types de composants : les stocks, les variables, les flux (flows) et les liens (links).

Les stock

Pour créer un stock, pressez le bouton "Stock" de la barre d'outils et cliquez dans la zone de dessin située en-dessous. Un nouveau stock apparaît. Chaque stock demande un nom unique, qui deviendra une variable globale. Les Stocks requièrent aussi une valeur initiale ("Initial value"). Cette dernière peut être un nombre, une variable, une expression NetLogo complexe ou un appel à un reporter NetLogo.

Les variable

Pour créer une variable, pressez le bouton "Variable" et cliquez dans la zone de dessin du diagramme. Chaque variable d'un Système dynamique doit recevoir un nom unique, qui deviendra le nom d'une procédure ou d'une variable globale. Les variables demandent aussi une expression. Cette expression peut être un nombre, une variable, une expression NetLogo complexe ou un appel à un reporter NetLogo.

Les flux

Pour créer un flux, pressez le bouton "Flow". Cliquez et maintenez pressé là où le flux doit commencer  –  soit sur un Stock, soit sur une zone vide  –  et tirez jusqu'à l'endroit où vous voulez qu'il aboutisse  –  sur un Stock ou une zone vide. Chaque flux doit avoir un nom unique, qui deviendra celui d'un reporter NetLogo. Les flux demandent une aussi expression, qui doit représenter le « débit » du flux de l'entrée à la sortie du « tuyau ». Cette expression peut être un nombre, une variable, une expression NetLogo complexe ou un appel à un reporter NetLogo. Si sa valeur est négative, le flux s'écoule dans l'autre direction

Quand plus d'un flux est connecté à un stock, il est important de prendre en compte la manière dont ces flux vont interagir les uns avec les autres. NetLogo n'oblige pas les flux qui sortent d'un stock de le faire dans un ordre particulier. De plus, NetLogo ne regarde pas si la totalité des flux qui sortent d'un stock est inférieure ou égale au contenu du stock. Ces comportements peuvent être implémentés explicitement dans l'expression exigée par le flux.

Par exemple, si un flux est défini par une valeur constante, disons 10, vous pouvez vous assurer qu'il ne draine jamais plus que la valeur du stock en utilisant la primitive min :   min (list stock 10). Si je veux qu'un flux A vide un stock avant que flux B ne soit calculé, je peux lier le flux A au flux B et modifier flux B pour soustraire la valeur de flux A du stock :  min (list (max (list 0 (stock - flow-a))) 10).

Les liens

Pour créer un lien, cliquez et maintenez pressé sur le point de départ du lien  –  une variable, un stock ou un flux  –  et tirez jusqu'à la variable ou le flux de destination.

Travailler avec les éléments du diagramme

Quand vous créez un stock, une variable, ou un flux, NetLogo affiche un point d'interrogation rouge sur le nouvel élément. Ce point d'interrogation indique que l'élément en question n'a pas encore reçu de nom. Un nom d'élément rouge indique que le stock n'est pas complet : il manque une ou plusieurs des valeurs requises pour pouvoir créer un modèle de système dynamique. Quand un élément du diagramme est complet, son nom est affiché en noir.

La sélection.  Pour sélectionner un élément d'un diagramme, cliquez-le. Pour sélectionner plusieurs éléments, pressez la touche Majuscule et cliquez sur les éléments à sélectionner. Vous pouvez aussi sélectionner un ou plusieurs éléments en tirant une boîte de sélection avec la souris.

L'édition.  Pour éditer un élément du diagramme, sélectionnez l'élément et pressez le bouton "Edit" de la barre d'outils. Il suffit aussi de double-cliquer l'élément. (Vous pouvez éditez les stocks, les flux et les variables, mais vous ne pouvez pas éditer les liens).

Le déplacement.  Pour déplacer un élément du diagramme, sélectionnez-le et tirez-le vers son nouvel emplacement.

Editer dt

screen shot

Dans la partie droite de la barre d'outils est affiché le dt par défaut, c'est-à-dire la durée écoulée entre deux calculs des états des paramètres du système dynamique. Cette durée dt correspond à un pas de la simulation. Pour modifier cette valeur par défaut, pressez le bouton "Edit" (à droite de la valeur de dt affichée) et entrez une nouvelle valeur.

Les erreurs

Quand vous cliquez le bouton "Check" ou éditez un stock, un flux ou une variable, le modélisateur génère automatiquement le code NetLogo correspondantau diagramme et tente de le compiler. S'il y a une erreur, le nom de l'onglet "Procedures" devient rouge, un message est affiché et la portion de code qui est à l'origine de l'erreur est mise en évidence.

screen shot

Ces informations devraient vous aider à avoir une meilleure idée de l'élément du diagramme qui est à l'origine du problème.

screen shot

Le panneau "Procedures"

Le Modélisateur de Systèmes dynamiques génère des variables et des procédures NetLogo basées sur le contenu du diagramme construit. Ce sont en fait ces procédures qui permettent à NetLogo d'effectuer les calculs nécessaires à la simulation décrite par le diagramme. Le panneau "Procedures" de la fenêtre du Modélisateur de Systèmes dynamiques affiche les procédures NetLogo générées.

Le contenu du panneau "Procedures" n'est pas éditable. Pour modifier le système dynamique, vous devez éditer le diagramme.

Examinons d'un peu plus près comment le code généré se rapporte au diagramme :

Les variables et les procédures définies dans ce panneau sont accessibles depuis la fenêtre principale de NetLogo, de la même manière que le sont les procédures et les variables définies dans le panneau "Procedures" principal de NetLogo. Vous pouvez appeler ces procédures depuis le panneau "Procedures" principal, depuis le Centre de commande ou avec les boutons placés sur le panneau "Interface". Vous pouvez faire référence aux variables globales à partir de n'importe où, y compris à partir du panneau "Procedures" principal et dans les moniteurs.

Il y a trois procédures importantes à signaler, qui sont : system-dynamics-setup, system-dynamics-go et system-dynamics-do-plot.

system-dynamics-setup initialise le modèle de Système dynamique. Il donne sa valeur à dt, appelle reset-ticks et initialise les stocks et les convertisseurs. Les convertisseurs à valeur constante sont initialisés en premier, suivis par les stocks à valeur constante. Les autres stocks sont initialisés ensuite par ordre alphabétique.

system-dynamics-go fait tourner le Système dynamique par pas d'unité de temps dt. Il calcule les valeurs des flux et des variables et met à jour la valeur des stocks. Il appelle aussi tick-advance avec la valeur de dt. Les convertisseurs et les flux avec des "Expressions" non-constantes ne sont calculés que lorsque cette procédure est appelée, toutefois, l'ordre de leur évaluation n'est pas défini.

system-dynamics-do-plot affiche les valeurs des stocks du Système dynamique. Pour utiliser cette procédure, il faut d'abord créer un traceur de courbes dans le panneau "Interface" de NetLogo. Il faut définir un crayon pour chaque stock dont vous voulez représenter le graphique. Cette procédure utilise le traceur courant, que vous pouvez changer au moyen de la commande set-current-plot.

Le Modélisateur de Systèmes dynamiques et NetLogo

Le diagramme que vous créez dans le Modélisateur de Systèmes dynamiques et les procédures générées à partir de ce diagramme font partie du modèle NetLogo. Quand vous sauvegardez ce modèle, le diagramme est sauvegardé dans le même fichier.

Tutoriel : Prédation loups-moutons

Nous allons maintenant créer un modèle de « Prédation loups-moutons » avec le Modélisateur de Systèmes dynamiques.

Première étape : la reproduction des moutons

Notre modèle aura une population de loups et une population de moutons. Commençons par les moutons. Il faut d'abord créer le stock qui contiendra la population de moutons.

Vous voyez un stock avec un point d'interrogation rouge au centre.

screen shot

La population de moutons peut s'accroître si un mouton naît. Pour ajouter ce fait à notre diagramme, il faut créer un flux entrant dans le stock de moutons.

Le nombre de moutons nés pendant une période de temps dt dépend du nombre de moutons vivants : plus il y a de moutons vivants, plus il y a de nouveaux-nés.

Le taux de natalité des moutons dépend aussi de certains facteurs constants dont la discussion sort du cadre de ce modèle, comme le taux de reproduction par exemple.

Votre diagramme devrait ressembler maintenant à ceci :

screen shot

L'étiquette du flux sheep-births est rouge parce que nous ne lui avons pas encore donné d'expression. La couleur rouge indique toujours qu'il manque quelque chose à cette partie du diagramme.

Le nombre de moutons entrant dans notre stock dépendra positivement du nombre de moutons et du taux de natalité sheep-birth-rate.

Nous avons maintenant un diagramme complet. Pour voir le code NetLogo généré par ce diagramme, cliquez l'ongleL "Procedures" de la fenêtre du Modélisateur de Systèmes dynamiques. Ce code devrait être le suivant :

screen shot

Deuxième étape : intégration à NetLogo

Une fois que le modèle d'agrégats a été créé avec le Modélisateur de Systèmes dynamiques, nous pouvons interagir avec ce modèle par l'intermédiaire de la fenêtre "Interface" de NetLogo. Construisons maintenant le modèle NetLogo nous permettant d'exécuter le code généré par le diagramme. Nous avons besoin des boutons setup et go pour appeler les procédures system-dynamics-setup et system-dynamics-go créées par le Modélisateur de Systèmes dynamiques. De plus, pour pouvoir bien suivre l'évolution des populations il nous faut aussi un moniteur et un traceur.

Nous sommes maintenant prêt à faire tourner notre modèle.

Observez ce qui se passe. La population de moutons s'accroît exponentiellement. Après quatre ou cinq itérations, nous avons une énorme quantité de moutons. Nous aboutissons à cette situation parce que nous avons des moutons qui se reproduisent mais qui ne meurent jamais.

Pour résoudre ce problème, terminons notre diagramme en introduisant une population de loups qui mangent des moutons.

Troisième étape : la prédation par les loups

Nous en avons maintenant vraiment terminé avec le diagramme, mais il faut encore mettre le modèle NetLogo à jour.

Vous devriez voir un graphique des populations qui ressemble à ceci :

screen shot

Conclusion

Le Modélisateur de Systèmes Dynamiques est toujours en cours de développement.

Améliorations planifiées

Parmi les fonctionnalités, nous avons prévu d'ajouter :

Retour d'informations

Si vous découvrez des bogues (bugs) dans le Modélisateur de Systèmes dynamiques, faites-nous le savoir à l'adresse bugs@ccl.northwestern.edu.

Nous aimerions aussi que vous nous fassiez part de vos désirs concernant de nouvelles fonctionnalités qui pourraient être utiles pour vos travaux. Si vous avez des questions, des commentaires ou des suggestions, écrivez-nous à l'adresse feedback@ccl.northwestern.edu.