Skip to content

Playing with communication between Entities

Objectifs

Dans cette exercice, nous commençons par utiliser les concepts suivants :

  • la communication entre Tortues et Patch
  • l'écriture dans la console en mode observer
  • les attributs et primitives de déplacements des Tortues : fd, heading, etc.
  • l'utilisation d'une boucle repeat pour répéter les commandes
  • l'utilisation de boutons liés à des procédures dans l'onglet code
  • l'utilisation d'une variable via un bouton de type slider
theory-sma
Figure 1

Algorithme

L'algorithme est le suivant :

  • (1) faire apparaitre une tortue avec un heading à 0
  • (2) déplacer la tortue en haut a gauche
  • (3) fixer la direction de la tortue à heading = heading + 90 degrés
  • (4) peindre en vert le patch sous la tortue
  • (5) avancer de 1
  • (6) revenir à l'étape (4) 8 fois puis revenir à l'étape (3)

Version manuelle

Utilisation de boucle

Ecrire les commandes ainsi en mode console s'avère assez vite fastidieux. Nous faisons entrer un autre concept pour nous faciliter la tâche, celui de boucle permettant de répéter les commandes. Une fois les étapes (1) et (2) réalisé, nous avons besoin de seulement deux commandes pour faire avancer et tourner la tortue.

repeat 8 [ask turtle 0 [ set pcolor green fd 1]]
ask turtle [set heading heading + 90 ]

Création de boutons avec les procédures

Pour rendre la tâche encore plus simple nous allons créer des boutons dans l'interface. Le code sera executé à chaque clic sur un des boutons.

Dans la plupart des modèles Netlogo on retrouve en général au moins deux étapes :

  • l'initialisation du "monde" simulé avec des conditions initiales, avec un bouton "setup"
  • l'execution de la simulation, c'est à dire la mise en mouvement des règles décrites dans le modèle, avec un bouton "go"

Pour créer un bouton sur l'interface, il faut faire un clic droit sur l'interface dans Netlogo, et selectionner "Button"

theory-sma
Figure 2

Une fenêtre s'ouvre pour renseigner le nom du bouton (Display name) et le code ou la procédure (Commands) qui doit être appelé.

theory-sma
Figure 3

Warning

Il est possible d'écrire directement du code dans le bouton, mais c'est une pratique déconseillé, car il est très difficile ensuite d'avoir une vue d'ensemble une fois que tous les bouton contiennent du code.

Une fois les deux boutons setup et go créé il faut définir les procédures correspondantes dans l'onglet code de l'interface.

to setup ; (1)

 clear-all ; (2)

 ask patches [ set pcolor white] 

 ; creer la tortue
 crt 1 

 ; action sur la tortue 0
  ask turtle 0 [
    set xcor -4
    set ycor 4
    set heading 90
    set color one-of shuffle [ red blue yellow] ; (3)
  ] 

end


to go

  repeat 8 [ ; (4)

    ask turtle 0 [
      set pcolor color
      fd 1 
    ]  

  ]

  ask turtle 0 [
    set heading heading + 90
  ] 

end
  1. Chaque procédure est délimité par un bloc to <nom-de-la-procedure> qui se termine par end
  2. Permet de faire une remise à zéro : destruction des tortues, remise à zéro des variables, etc.
  3. Tire au hasard une couleur dans une liste randomisé à chaque appel
  4. Le bloc de code dans le repeat [ ... ] sera répété 8 fois

Note

Les procédures peuvent être déclarés et appelés sans forcément avoir un bouton associés.

Multiples Tortues via une variable

theory-sma
Figure 4

Toujours avec un clic droit sur l'interface (figure 2) nous allons créer un nouveau bouton Slider qui prendra pour nom de Global variable : _nb-turtles_en indiquant des valeurs min, max et une valeur par défaut.

theory-sma
Figure 5

Cette Global variable peut ensuite être appelé directement dans le code par son nom, ce qui permet de récupérer son contenu.

to setup 

 clear-all 

 ask patches [ set pcolor white] 

 ; creer la tortue
 crt nb-turtles ; (1)

 ; action sur la tortue 0
  ask turtles [ ; (2)
    set xcor random-xcor ; (3)
    set ycor random-ycor
    set heading 90
    set color one-of shuffle [ red blue yellow orange green] ; 
  ] 

end


to go

  repeat 8 [ 

    ask turtles [ ; (4)
      set pcolor color
      fd 1 
    ]  

  ]

  ask turtles [ ; (5)
    set heading heading + 90
  ] 

end
  1. On créé un nombre de tortues en fonction de la variable nb-turtles_défini par le _Slider dans l'interface
  2. On s'adresse à toutes les tortues à présent et non plus seulement à la tortue 0
  3. Les coordonnées xy de chaque tortue deviennent aléatoire pour que les tortues soient dispersés
  4. On s'adresse à toutes les tortues à présent et non plus seulement à la tortue 0
  5. On s'adresse à toutes les tortues à présent et non plus seulement à la tortue 0