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.