Maintenant que nous avons vu comment cela fonctionnait, construisons notre premier modèle sous NetLogo
Ce modèle consistera en une fourmi évoluant au hasard et c'est tout
Ouvrons NetLogo. Vous clickez sur l'icone NetLogo. La version ne change rien.
La première chose à faire est de créer les boutons "Set Up" et "Go"
Aller à la partie "Buttons" dans la partie "construction de l'interface" du menu
En cliquant sur ce menu on peut voir toutes les catégories d'objet que l'on peut rajouter à l'interface utilisateur
Ajoutons donc un boutons en cliquant sur l'interface et décidons que cet bouton est pour le "Set Up"
Puis rajoutons un autre bouton pour "Go"
Je peux le sélectionner par Click-Droit et le déplacer ou le redimmensionner
Nous avons donc les boutons "Set Up" Et "Go" mais aucun code ne leur est associé
Créons le code qui lui est associé
Allons à la tabulation "Code" afin d'écrire la procédure
La première que nous allons écrire est "Set Up"
D'abord nous effaçons tout : "Clear All" est une commande qui efface "le monde" soit l'espace de visualisation)
Ensuite nous remettons à zéro les ticks: "Reset Ticks"
Nous allons à présent créer une fourmi.
Et à présent nous allons créer une fourmi. EN FAIT, pour des raisons historiques, tous les agents sont appelés des "Tortues" sous NetLogo
Alors créons une Tortue ("Create Turtle 1")
Et demandons lui de faire une liste de choses ("Ask Turtle")
1) avoir une apparence "Shape" d'insecte "Bug"
2) avoir une taille "size" 3
3) avoir une couleur "color" rouge "red"
Et voilà c'est tout. L'icone "Check", vérifie qu'il n'y a pas d'erreur de codage "bugs"
Je clicke et il semble qu'il y ait un bug. J'aurai du écrire "Ask Turtles" avec un s. De fait, NetLogo considère toujours qu'il y a une population de Tortues (ou agents)
Et lorsque l'on crée une instruction c'est pour toute la population
Essayons à nouveau. Tout semble fonctionner.
Alors clickons "Set up" et voilà nous voyons notre fourmi bien au milieu
Le bouton "Go" est toujours rouge, ce qui signifie que l'on n'a toujours pas écrit le code qui lui est associé
Alors écrivons la procédure pour "Go"
On retourne à la tabulation pour le code
On écrit "to go" et demander aux tortues de faire des choses "ask turtles"
D'abord, tourner leur corps de 30°: "right 30"
Puis d'avancer de 4 pas: "forward 4". Bien
Puis, incrémenter le compteur temps de 1 unité. C'est ce que fait la commande "tick".
Puis terminer: "end"
Vérifions. Tout semble fonctionner.
Retournons à l'interface et tapons "Go"
On voit que la tortue à tourné son corps de 30° et a progressé de 4 pas.
On peut continuer à presser le bouton "Go" et la tortue tourne en rond
Si nous voulons qu'elle progresse ainsi sans que l'on ait besoin de taper "Go" de manière répétée
Clickons droit sur le Bouton "Go", choisir "Edit" puis l'option "forever" qui répétera la procédure "Go" pour toujours
Regardons. Et si nous ralentissons un peu on voit la fourmi tourner en rond par elle-même
Clickons "Go" Pour l'arrêter
Si nous voulons redémarrer, nous pouvons clicker "Go" de nouveau, puis l'arrêter, etc.
Si nous voulons la ramener au point de départ, clickons "Set up".
Si l'on clicke de nouveau "Set up", la fourmi est toujours au milieu mais pointe dans une autre direction
C'est parce que "Set up" place la fourmi au centre dans une direction aléatoire
Nous pouvons sauvegarder notre modèle dans sa version présente en allant dans l'onglet fichier "File" et choisissant sauver sous "Save as"
Sauvegardons sous "Ant1" et le fichier apparait sur le bureau sous "Ant1.NetLogo"
Si nous quittons NetLogo et voulons faire tourner notre modèle, il suffit de double-clicker sur le fichier et NetLogo se chargera afin d'ouvrir le modèle
Il n'y a qu'une chose qui cloche avec notre modèle. C'est qu'il est ennuyeux
Tout ce que fait la fourmi c'est de tourner en rond
Alors essayons de rendre les choses un peu plus intéressantes
Ouvrons le code et rajoutons une simple instruction. Au lieu de tourner à droite de 30°, ajoutons le mot aléatoire "random"
A présent, la fourmi choisira un nombre aléatoire entre 0 et 30 moins 1 et tournera d'autant de degrés
A chaque fois que l'on repassera par cette étape, un nouveau nombre sera choisi
On peut faire la même chose ici pour la distance à avancer entre 0 et 4 moins 1 soit 3.
Voyons ce qui se passe maintenant. On retourne sur l'interface et on appuie sur "Set up" puis "Go"
On peut voir que la fourmi tourne toujours plus ou moins en rond mais que son comportement est plus erratique
La fourmi à l'air de traverser le mur pour réapparaître de l'autre côté.
En fait le monde dans lequel nous évoluons boucle de droite à gauche ainsi que de haut en bas.
Le monde apparaît plat mais il est en fait bouclé comme une tore où mes murs se rejoignent
Tout cela peut apparaître un peu bizarre alors nous pouvons clicker-droit sur le fond noir du monde 'World" et désactiver les boucles "wraps".
Voyons le résultat.
Maintenant lorsque la fourmi sort du monde, elle ne réapparaît pas mais doit revenir d'elle même dans le champ observé.
Bien que notre fourmi puisse évoluer de manière aléatoire, ce n'est toujours pas passionnant car la fourmi ne peut tourner qu'à droite
Alors écrivons un peu de code qui lui permette de choisir de manière aléatoire si elle tourne à gauche ou à droite.
C'est un peu comme si elle tirait à pile ou face de quel côté elle allait tourner.
Pour la procédure de tirage au sort, nous allons utiliser la procédure "To-report" en l'appelant "Coin-flip" pour pile ou face
Cette procédure est différente de la précédente car elle ne va pas donner une valeur numérique mais un résultat Booléen Vrai ou Faux
Tout ce que l'on a à écrire est "report random 2" qui produit de manière aléatoire et équiprobable un nombre entre 0 et 1 (2 moins 1). Puis "End"
Ainsi, la moitié des fois, nous produirons un 0 pour "faux" et la moitié un 1 pour 'vrai"
Et on peut utiliser ce résultat plus haut en insérant une instruction conditionnelle "Ifelse"
et à demander une action si la procédure "Coin-Flip" produit la condition et une autre action dans le cas inverse entre crochets
Si "coin-flip" est vrai on va à droite et s'il est faux on va à gauche
Lorsque l'on fait tourner la procédure "Go", à chaque pas de temps, un choix droite/gauche sera effectué
Voyons comment cela fonctionne.
Clickons "Set Up" et "Go". On peut voir que la tortue va dans différentes directions.
Elle peut se coincer contre le mur mais elle cherche à tourner à droite ou à gauche.
Notre seul problème est de se trouver coincé trop longtemps.
On peut améliorer cela en changeant l'amplitude de 30 à 60
Essayons encore
Oui, il semble que la tortue se coince un peu moins souvent et que son comportement soit plus réaliste
A chaque fois que vous écrivez un programme, c'est toujours une bonne idée d'insérer des commentaires
Revenons au code. Un commentaire est juste un peu de texte inséré dans le programme qui sera ignoré par l'ordinateur
car il est destiné pour les lecteurs
En NetLogo, c'est juste du texte suivant un point virgule
Ecrivons "vrai ou faux de manière aléatoire"
Un autre commentaire ici: "si coinflip est vrai, tourner à droite, sinon tourner à gauche"
Voilà nous avons ainsi de petits rappels pour nous mêmes ou pour quelqu'un qui lira le programme quant à nos intentions à chaque étape
C'est vraiment très utile lorsque l'on a un programme plus compliqué à érire
Surtout lorsque l'on y retourne après quelque temps. Cela permet de se rappeler de l'objectif recherché
C'est donc utile même si personne d'autre ne lira votre programme
Nous sommes maintenant prêts à sauvegarder notre modèle et insérer une note
Nous allons d'abord lui donner un nom dans le menu interface et insérer une note
"Ant1" (pour Fourmi1) et augmentons la taille des caractères à 18
Maintenant nous sélectionnons ceci et cela et alignons les boites. Et voilà, c'est fini.
Sauvegarder.
Notre objectif en vous apprenant NetLogo et de vous présenter comment cela fonctionne.
Nous allons utiliser de nombreux modèles de simulation en NetLogo dans ce cours
Nous n'allons pas en écrire beaucoup
Mais il est important que vous compreniez comment fonctionne le code et l'interface
Vous ferez des modifications aux modèles que nous utiliserons
Et si vous êtes plus motivés, vous pouvez essayer d'écrire vos propres modèles
L'exercice à faire pour cette section est d'utiliser le même modèle qu'ici et de le faire fonctionner
Ce ne sera pas noté mais doit vous servir à comprendre tout ce qui vous a été montré dans cette vidéo
et n’hésitez pas à poser des questions sur le forum. Il est là pour cela.