Skip to content

Turtles and Patches

Create Turtles

Tout passe par la commande crt, celle-ci prend un nombre en paramètre et une série de commande entre [...] qui permettent d'initialiser ses caractéristiques.

turtles
Tortues en liberté

Les tortues ont toutes des attributs par défaut :

Il est possible d'ajouter d'autres attributs possible à nos tortues avec le bloc spécial turtles-own :

turtles-own[
energy
]

Comme toutes les autres variables de tortues, il est possible de changer la valeur en utilisant le mot-clef set, à l'initialisation ou dans un bloc ask.

crt turtles 5[
set energy 100
]

Exercice

Essayer de trouver et d'écrire avec l'aide du dictionnaire Netlogo les commandes qui permettent de fixer des coordonnées xcor et ycor aléatoire (ou en anglais random).

Ces attributs peuvent contenir ce que l'on veut, du texte, des chiffres, une liste, un ou des agents, un ou des patchs. Par exemple, on attribue un patch au hasard à chaque tortue.

turtles-own [
  my-favorite-patch
]

ask turtles [
  set my-favorite-patch one-of patches
  show my-favorite-patch
]

Exercice

Essayer de trouver et d'écrire avec l'aide du dictionnaire Netlogo comment attribuer plusieurs patchs à une tortue ? Il faut regarder du côté des commandes opérant sur des sets

Create Patches

On ne créé par les patchs, ils preexistent simplement à des coordonnées qui sont dépendantes de la taille de l'espace.

Asking Turtles and/or Patches

ask est un des mot-clefs les plus importants et les plus courant dans Netlogo.

Vous allez demander à une ou à un ensemble de tortues d'executer l'ensemble des commandes situés entre les crochets [ ... ]. L'ordre dans lequel les tortues applique cet ensemble de commande est aléatoire. Autrement dit,a chaque fois qu'un bloc ask est appelé, l'ordre dans lequel les tortues applique les commandes change.

Lorsque vous vous écrivez du code entre les crochets d'une commande ask, vous passez d'un contexte d'observateur à un contexte propre aux tortues.

ask turtles [
set energy random 100
]

Toutes les tortues vont avoir une valeur energy entre 0 et 100.

Querying using with

Il est possible de faire des requêtes beaucoup plus ciblées, en utilisant le mot clef with

ask turtles with [color = red] [
set size 2
]

Il y a deux blocs ici :

  • le premier bloc with permet de selectionner - ou filtrer - en fonction d'un prédicat qui sera appliqué à tout le groupe de tortues. Si ce prédicat renvoie vrai, alors ...
  • le deuxième bloc est executé pour cette tortue donnée

Il est possible d'appeler directement une tortue, soit par son numéro, soit plus directement en sortie de requête ou via une variable qui contient une ou plusieurs tortues :

ask turtle 1 [
  set color red
  set shape "dot"
]
let maselection one-of turtles with [pcolor = green]
ask maselection [
 set color red 
]

C'est exactement le même fonctionnement pour les patches, seulement au lieu de les appeler par leur numéro, on peut les appeler par leur coordonnées xy :

ask patch 3 0 [
  set pcolor red
]
ask patches with [pcolor = red] [
  set pcolor white
]

Collect them all

Les Turtle ou les Patch font partie de collection que l'on appele respectivement des Agentset ou des Patchset.

Les commandes (turtle-set _<value1> <value 2> <..._>) et patch-set <value1> <value2> <...> peuvent être utilisé pour créer manuellement des AgentSet

Toutefois, c'est assez rare que l'on utilise ces fonctions directement, et la plupart du temps on travaille sur des AgentSet qui nous sont renvoyés lors des principales requêtes, dès lors qu'elles renvoient plus d'une Turtle/Patch. On peut consulter ces fonctions dans le dictionnaires, dans la catégorie AgentSet

Turtles never dies

Les tortues peuvent mourir de plusieurs façon :

  • avec la commande die, qui demande à la tortue appelante de disparaitre
  • avec la commande clear-all, qui remet à zéro toute la simulation

Turtles with Patches

Les tortues peuvent demander à d'autres tortues ou patchs de réaliser des actions, autrement dit, il est possible d'écrire des blocs ask [ ... ] à l'intérieur d'autres blocs ask [ ... ], c'est ce que nous verrons plus en détail dans la partie contexte du cours.

theory-sma
Dialoguer entre Patch et Turtle

Un exemple assez courant est de communiquer avec le patch sous la tortue interrogée. Par exemple, ici nous demandons à chacune des tortues de demander au patch présent en dessous d'elle (patch-here) de se colorer en vert. L'inverse existe aussi avec turtles-here), qui renvoie pour chaque patch les tortues présente sur ce dernier.

ask turtles [
   ask patch-here [
     set pcolor green
   ]
]

Exercice

Essayer de reprendre l'exercice précédent avec l'attribution d'un ou plusieurs patch à chaque tortue. Demander à ce que la tortue colore les patches en question en fonction de sa couleur.