Documentation et nombres aléatoires Nous avons notre modèle et c’est à peu près ce que nous voulions faire. Quand j’utilise le modèle pour parler à propos de quelques concepts-clés des modèles à base d’agents. Avant tout, nous avons fait un bon travail de documentation du code. Vous voulez probablement documenter l’onglet info. Je retourne à cet onglet. A la section ‘What is it ?’ par exemple, nous pouvons dire : [il écrit] ‘C’est un modèle du jeu des héros et des lâches créé par le groupe Fratelli'. Nous pouvons poursuivre et remplir les autres sections. Une chose que je trouve très importante, en tant que codeur de modèle ou programmeur de modèle ou tel que je construis mon modèle, est de rédiger au début ce que l’on appelle un pseudo-code de description sur la manière dont le modèle fonctionne. Je fais cela souvent au niveau de la section ‘How it works’ (comment cela fonctionne) car ce contenu peut évoluer. Vous pourriez aussi vouloir le sauvegarder dans un document séparé plus technique si vous ne voulez pas l’inclure directement dans l’onglet info. Vous savez que j’ai toujours parlé du fait qu’il y a une [écrit – les passages entre ‘’ = ce qu’il écrit] ‘procédure d’initialisation’ et comment il va y avoir une procédure ‘itérative ou par période’. L’initialisation se fait avec la procédure ‘initialiser’ et l’itération avec ‘exécuter’. Puis que veut-on que le modèle fasse ? Parfois, j’écris ceci avant même de créer le modèle. En l’occurrence, je connais bien le modèle donc je vais juste commencer à l’écrire. Comme vous le savez, nous avons voulu ‘créer un groupe de tortues’ et, dans un travail futur, nous voulons que ce ‘nombre soit défini avec un curseur d’input’ présent sur l’interface. Je ne l’ai pas fait pour ce modèle pour l’instant. ‘Chaque tortue se déplace vers un lieu aléatoire’ à l’écran. Dans le lieu, nous pouvons avoir la condition basée sur la personnalité : ‘il y a un curseur appelé ‘personalities’ qui spécifie le comportement’. La plupart du temps si nous parlons d’une variable dans la description du pseudo-code, nous l’écrivons en majuscules : [il modifie] ‘INITIALISER’, ‘EXECUTER’, ‘PERSONNALITES’ en majuscules, et ‘NOMBRE’ de notre ‘nombre de tortues’ pour le distinguer du reste de notre texte. ‘Si PERSONNALITES = ‘Brave’ les tortues deviennent bleues’. Même chose pour les lâches : ‘Si PERSONNALITES = ‘Lâches’ les tortues deviennent rouges’. Idem pour les tortues mixtes : ‘Si PERSONNALITES = ‘Mixtes’ les tortues deviennent bleues ou rouges aléatoirement’. Nous devons aussi dire que ‘chaque tortue choisit un AMI et un ENNEMI’. Et ‘nous réinitialisons le compteur de périodes’ si vous voulez. C’est donc juste une description en langage naturel. Faisons de même pour la procédure GO. ‘Chaque tortue qui est bleue se déplace’… Je viens de réaliser que ce n’est pas ce que j’ai défini... D’où l’importance de la documentation ! Si vous avez remarqué, j’écris que la tortue devient bleue si elle est brave mais dans le code, ce sont les lâches qui deviennent bleues. Donc corrigeons cette erreur pendant que nous sommes encore là. D’où l’importance d’être sûr d’avoir vérifié votre code. Modifions pour les tortues ‘Brave’ la couleur en ‘rouge’ et ‘bleue’ pour les lâches. ‘Chaque tortue qui est bleue s’éloigne de l’ennemi et se dirige de l’autre côté de l’ami’. Ce sont des variables donc je les mets en majuscules : ‘ENNEMI’ et ‘AMI’. Nous pouvons faire la même chose pour : ‘chaque tortue qui est rouge avance vers l’ENNEMI et rejoindre l’AMI’, quelque chose comme cela. C’est la description en langage naturel du modèle lui-même, très facile à faire et c’est une description en pseudo-code. Dès lors, je peux transmettre à quelqu’un d’autre le modèle pour savoir ce qu’il en pense. Il est important d’écrire cette documentation, soyez certain de l’avoir fait aussi bien dans un document séparé qu’à l’intérieur du code. Il est alors plus facile de dire si votre modèle conceptuel et votre modèle implémenté correspondent. Une chose que je trouve très intéressant dans ce modèle est lorsque vous cliquez sur ‘MIXED’, vous n’avez jamais les mêmes procédures ou les mêmes résultats. Donc il semble être toujours un peu différent car NetLogo place aléatoirement les tortues dans le monde. Néanmoins, ce qui est intéressant est que l’ordinateur n’a pas actuellement une notion juste de l’aléatoire. A la place, il utilise un générateur de nombres aléatoires pour créer ce que l’on appelle des nombres pseudo-aléatoires. Ces nombres sont encore générés selon un processus déterministe spécifié par des RANDOM-SEED dans lequel NetLogo génère un tas de nombres aléatoires à chaque fois que le modèle est lancé et utilise ces graines (seeds) pour décider quelles valeurs seront tirées. Mais vous pouvez initialiser le SEED. Pour illustrer cela, une chose que je peux faire est d'écrire par exemple, [il écrit] ‘random-seed 188’. Puis, je peux dire [écrit] ‘show random 100’. Ce, deux-trois fois et cela va générer trois nombres aléatoires. Si je rétablis le SEED aléatoire avec la même valeur [il écrit] : ‘random-seed 188’ puis réécris ‘show random 100’, je vais avoir les 3 mêmes nombres aléatoires à chaque ligne de résultat. Cela signifie que si je vois un modèle de comportement et que j’ai initialisé le RANDOM-SEED, je peux recréer le modèle même si c’est techniquement un résultat aléatoire de ce qui se passe. C’est ce qui est fait souvent lorsque vous lancez un tas de modèles à base d’agents dans lesquels vous initialisez le SEED avant de le lancer. Alors, si quelque chose d’intéressant se passe dans le modèle vous pouvez revenir en arrière et regarder les résultats de l’étape précédente. En fait, si vous ouvrez le modèle des ‘Héros et des lâches’ qui se trouve dans la librairie des modèles dans NetLogo (enregistrez avant votre modèle en-cours). Vous le trouverez sous la section ‘IABM Textbook’ au chapitre 2 (CHAPTER 2) qui est le chapitre avec notre modèle. Nous y avons ajouté des configurations pré-initialisées. Avec ces dernières, si vous lancez les commandes nommées ‘PRESET’ [clic droit sur le bouton ‘DOT’ puis ‘Edit’], vous avez cette longue chaîne de caractères. Si vous regardez dans le code [onglet CODE puis liste ‘PROCEDURE’, choisir ‘preset’], la procédure PRESET prend une graine aléatoire [68 ici] et initialise cette graine avec cette valeur. En fait, il doit aussi initialiser le nombre d’agents avec une valeur spécifique car si le nombre d’agents est différent alors vous aurez un nombre différent d'appels Qu’est-ce que cela nous permet de faire ? Quand nous cliquons sur un de ces boutons de configuration de pré-initialisation, nous allons toujours avoir le même modèle. Si nous cliquons sur le bouton du modèle ‘DOT’ puis GO, vous allez voir que nous avons un point qui tourne. Il y a un modèle standard que nous voyons si nous cliquons sur le bouton ‘FROZEN’ puis GO, vous voyez que nous arrivons à cette étape qui est intéressante où un tas de tortues sont en train de trembler de froid au milieu du monde. Un de mes préférés est le modèle du jeu de l’ondamania qui rebondit d’un bord à un autre bord. Le modèle en spirale qui crée cet effet en spirale au milieu. Vous pouvez essayer les autres ondamania ou yo-yo ou le modèle du troupeau errant. Nous appelons aussi 'GENERALLY COOL ONE THAT EVENTUALLY STOPS’ dont le point à relever est qu’il stoppe. Nous n’avons pas trouvé de nom plus court. De toute façon, cela illustre à la fois un puissant problème et bénéfice du monde de NetLogo qui est la modélisation à base d’agents, ce qui fait que vous allez être capable de contrôler quelque peu le caractère aléatoire de ce qui se passe mais vous devez réfléchir quand vous générez les résultats de votre modèle sur la signification réelle de ce caractère aléatoire. Voici pour cette semaine, excepté la conclusion qui arrive dans la suite. Vous pouvez y aller et le test sera vite mis en ligne. Merci. La semaine prochaine, nous commencerons l’unité 3 dans lequel nous aborderons comment développer des modèles que d’autres personnes ont construit.