Fiche 11: Les fourmis `a NetLogo

Transcription

Fiche 11: Les fourmis `a NetLogo
Fiche 11:
Les fourmis à NetLogo
Master 1 I2L
2014 / 2015
Ces travaux dirigés sur le thème de l’Intelligence Collective apporteront des éléments de
réponse à la question : Comment modéliser et simuler le comportement collectif d’une société
d’insectes ? Lors de ces travaux, vous apprendrez à implémenter en NetLogo un mécanisme
de stigmergie, c’est-à-dire une communication indirecte entre agents par modification d’un
environnement partagé.
Exercice 1
Ce premier exercice a pour objectif de mettre en place la simulation. Commencer par configurer le Model Settings de l’interface avec :
— Location of origin à Center
— max-pxcor et max-pycor à 50
— min-pxcor et min-pycor à -50
— aucun World wraps
— Patch size à 5
L’environnement sera constitué d’un ensemble des 10201 patches Un patch peut :
— être à l’intérieur du nid (de couleur violet)
— être dans une zone de nourriture (i.e. contenir de la nourriture) ; Il y a trois zones de
nourriture
— se situer en dehors du nid et d’une zone de nourriture
Chaque patch possède en propre quatre variables, compléter le code ci-dessous (cf. cours)
patches-own [ ... ]
Les fourmis sont représentées par des turtles, initialement toutes les fourmis sont : dans le
nid (au centre de l’environnement) de couleur rouge (elles ne portent pas de nourriture)
A. étudier et exécuter le code NetLogo suivant après avoir ”construit” l’interface correspondante.
to setup
clear-all
;; creer l’environnement
ask patches [
setup-nid
setup-nourriture
]
;; creer la fourmiliere au centre
1
create-turtles taille-fourmiliere [
setxy 0 0 ; initialement toutes les fourmis sont dans le nid
set shape "bug"
set size 2
set color red
]
reset-ticks
end
to setup-nid ;; procedure patch
set nid? ((distancexy 0 0) < 5)
if (nid?) [set pcolor violet]
;
set odeur-nid (200 - distancexy 0 0)
end
to setup-nourriture ;; procedure patch
if (distancexy (0.6 * max-pxcor)
0) < 5 [set nourriture
2 set pcolor cyan]
if (distancexy (-0.7 * max-pxcor) (-0.7 * max-pycor)) < 5 [set nourriture
2 set pcolor sky ]
if (distancexy (-0.8 * max-pxcor) ( 0.8 * max-pycor)) < 5 [set nourriture
2 set pcolor blue]
end
Vous identifierez l’instruction qui permet de simuler la diffusion par le nid d’une odeur dans
l’environnement.
B. Ajouter un composant graphique de type switch pour visualiser l’odeur du nid en tout
point de l’espace. Ce composant permettra de fixer la valeur de la variable globale booléenne
visualiser-odeur-nid ?.
Modifier la procédure setup-nid comme suit :
to setup-nid ;; procedure patch
set nid? ((distancexy 0 0) < 5)
if (nid?) [set pcolor violet]
;
set odeur-nid (200 - distancexy 0 0)
if ( ... ) [set pcolor scale-color green odeur-nid 200 130]
end
Vous identifierez l’instruction qui permet de visualiser le gradient d’odeur dans l’environnement.
C. On souhaite disposer de plusieurs configurations concernant la disposition des zones de
nourritures : ”3 distances relatives différentes”, ”2 distances proches égales”, ou ”2 distances
éloignées égales”. Définir via un composant graphique de type chooser une variable globale
position-zones-nourriture qui ne peut prendre comme valeur qu’une de ses trois configurations.
Modifier la procédure setup-nourriture comme suit :
to setup-nourriture ;; procedure patch
if (position-zones-nourriture = "3 distances differentes")[
if (distancexy (0.6 * max-pxcor)
0) < 5 [set nourriture
2 set pcolor cyan]
2
if (distancexy (-0.7 * max-pxcor) (-0.7 * max-pycor)) < 5 [set nourriture
2 set pcolor sky ]
if (distancexy (-0.8 * max-pxcor) ( 0.8 * max-pycor)) < 5 [set nourriture
2 set pcolor blue]
]
if (position-zones-nourriture = "2 distances proches egales")[
if (distancexy (0.7 * max-pxcor)
0) < 5 [ set nourriture
2 set pcolor cyan]
if (distancexy 0
(-0.7 * max-pycor)) < 5 [set nourriture 2
set pcolor sky ]
if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5 [set nourriture 2
set pcolor blue]
]
if (position-zones-nourriture = "2 distances eloignees egales")[
if (distancexy (0.6 * max-pxcor)
0) < 5 [set nourriture 2
set pcolor cyan]
if (distancexy (-0.8 * max-pxcor) (-0.8 * max-pycor)) < 5 [set nourriture
2 set pcolor sky ]
if (distancexy (-0.8 * max-pxcor) ( 0.8 * max-pycor)) < 5 [set nourriture
2 set pcolor blue]
]
end
Exercice 2
L’objectif dans cet exercice est de simuler le déplacement des fourmis
A. Analyser et tester le code NetLogo suivant qui permet aux fourmis de quitter le nid les
unes après les autres et de se déplacer au hasard dans leur environnement. Que se passe-t-il
quand une fourmi touche un bord ? Contrà´ler que le slider ”taille-fourmillière” est opérant !
to go
ask turtles [
if (who >= ticks) [ stop ] ;; pour que les fourmis partent du nid l’une
apres l’autre
tortiller-avancer
]
tick
end
to tortiller-avancer ;; procedure turtle
rt random 40
lt random 40
if (not can-move? 1) [ rt 180 ]
fd 1
end
B. Vous allez maintenant completer la procedure go afin que les fourmis puissent chercher de
la nourriture et retourner au nid.
to go
3
ask turtles[
if (who >= ticks) [ stop ] ;; pour que les fourmis partent du nid l’une
apres l’autre
ifelse (color = red)
[ chercher-nourriture ] ;; ne transporte pas de nourriture
[ retourner-au-nid ]
;; transporte de la nourriture et retourne au nid
avec
tortiller-avancer
]
tick
end
Analyser le code des procédures suivantes et compléter l’interface avec les deux swtichs correspondant aux variables globales sensible-odeur-pheromone ? et sensible-odeur-nid ?. Noter
l’influence de ces deux variables booléennes sur le comportement des fourmis !
to chercher-nourriture ;; procedure turtle
if (nourriture > 0)
[ set color blue
;; prendre de la nourriture
set nourriture nourriture - 1 ;; une turtle peut acceder aux variables
propres du patch sur lequel elle est positionnee
if (nourriture = 0) [set pcolor black]
]
;; aller dans la direction ou la concentration de pheromone est la plus
forte
if (0.05 < odeur-pheromone) and (odeur-pheromone < 2)
[ if (sensible-odeur-pheromone?) [aller-vers-odeur ... ]]
end
to retourner-au-nid ;; turtle procedure
ifelse (nid?) [ set color red ;; deposer (virtuellement) la nourriture et
repartir a la recherche de nourriture
]
[ set odeur-pheromone odeur-pheromone + 60 ;; deposer de la pheromone
if (sensible-odeur-nid?) [aller-vers-odeur ... ]
]
end
to aller-vers-odeur [type-odeur] ;; procedure turtle
let odeur-devant odeur-a-angle type-odeur 0
let odeur-droite odeur-a-angle type-odeur 45
let odeur-gauche odeur-a-angle type-odeur -45
if (odeur-droite > odeur-devant) or (odeur-gauche > odeur-devant)
[ ifelse (odeur-droite > odeur-gauche)
[ rt 45 ]
[ lt 45 ] ]
end
to-report odeur-a-angle [type-odeur angle]
let p patch-right-and-ahead angle 1
if p = nobody [ report 0 ]
ifelse (type-odeur = "nid") [report [odeur-nid] of p] [
if (type-odeur = "pheromone") [report [odeur-pheromone] of p]]
end
4
C. Vous allez maintenant compléter le simulateur en diffusant les phéromones déposées par
les fourmis.
1. Ajouter l’instruction diffuser-pheromone dans le go
2. Ajouter dans le code la procédure correspondante : to diffuser-pheromone diffuse odeurpheromone (taux-diffusion-pheromone / 100) end
3. Compléter en conséquence l’interface.
4. Régler le paramètres pour contrà´ler l’émergence de chemin de phéromone entre le nid
au centre et les différentes sources de nourriture.
D. Vous allez maintenant achever le simulateur en diminuant sur chaque patch par évaporation
la quantité de phéromones.
1. Ajouter l’instruction evaporer-pheromone dans le go ...
2. Ajouter dans le code la procédure correspondante :
to evaporer-pheromone
ask patches [
set odeur-pheromone (odeur-pheromone * (100 - taux-evaporationpheromone) / 100)
if (nourriture = 0 and not nid?) [set pcolor scale-color blue odeur
-pheromone 0.1 5]
]
end
3. Compléter en conséquence l’interface.
4. Régler les paramètres pour contrà´ler l’émergence de chemin de phéromone entre le nuit
au centre et les différentes sources de nourriture.
Exercice 3
Dans cet exercice vous allez utiliser votre simulation pour analyser le comportement des
fourmis en fonction des différents paramètres. Identifier les paramètres principaux du modèle.
A. Commencer par compléter le code NetLogo par la procédure tracer qui permet de visualiser
(en ”temps réel”) l’évolution de la quantité de nourriture disponible dans chacune des trois
zones. Pensez à appeler cette procédure dans le go et également à compléter l’interface en
conséquence.
to tracer
if (not tracer?) [ stop ]
set-current-plot "nourriture dans chaque zone"
set-current-plot-pen "nourriture en zone 1"
plot sum [nourriture] of patches with [pcolor = cyan]
set-current-plot-pen "nourriture en zone 2"
plot sum [nourriture] of patches with [pcolor = sky]
set-current-plot-pen "nourriture en zone 3"
plot sum [nourriture] of patches with [pcolor = blue]
end
Trouver une configuration qui permet aux fourmis d’exploiter les trois zones de nourriture selon
leur distance relative au nid.
5
B. Vous pouvez (devez) maintenant vous posez des questions du genre :
— ”l’ordre dans lequel les zones de nourriture sont exploitées est-il en relation avec leur
position respectivement par rapport au nid ?”
— ”L’exploitation des différentes zones de nourriture s’effectue-t-elle séquentiellement ou
en parallèle ?”
— ”Quel est l’influence de la taille de la fourmilière ?”
— ”Quel est l’intérêt du mécanisme de diffusion ?”
— ”Quel est l’intérêt du mécanisme d’évaporation ?”
— ”Quel est l’influence du taux de diffusion ?”
— ”Quel est l’influence du taux d’évaporation ?”
— ...
Exercice 4
Il s’agit dans cet exercice de montrer les capacités d’adaptation des agents relativement
à des variations de l’environnement. A chaque instant (ticks) l’unique zone de ressources en
nourriture se déplace sur un cercle centré sur le nid. Techniquement, on utilisera la première
turtle (turtle dont le who est 0) pour contrà´ler de déplacement de la source de nourriture.
(Cette turtle ne sera donc plus utilisée pour représenter un agent-fourmi)
A. Modifier comme suit la procédure principale :
to go
deplacer-ressources
ask turtles with [who > 0] [
if (who >= ticks) [ stop ] ;; pour que les fourmis partent du nid l’une
apres l’autre ...
ifelse (color = red)
[ chercher-nourriture ] ;; ne transporte pas de nourriture
[ retourner-au-nid ]
;; transporte de la nourriture et retourne
au nid avec
tortiller-avancer
]
diffuser...
evaporer...
tick
tracer
end
B. Ajouter dans le code la procédure correspondante :
to deplacer-ressources
ask turtle 0 [
let vitesse-deplacement 0.1
let distance-centre-ressource 40
ask patches in-cone (distance-centre-ressource + 6) 5 [ set plabel ""
set nourriture 0]
set heading ((heading - vitesse-deplacement) mod 360)
ask patches in-cone (distance-centre-ressource + 6) 5 [ set plabel "+"
set plabel-color red set nourriture 100]
6
ask patches in-cone (distance-centre-ressource) 5 [ set plabel ""]
]
end
C. Supprimer dans la procédure setup l’appel à la procédure setup-nourriture et utiliser votre
simulateur...
D. Ajouter dans l’interface un curseur pour fixer la vitesse de déplacement de la source de
nourriture. Déterminer la vitesse maximum qui permet l’émergence d’une scultature entre le
nid et la source mouvante de nourriture.
7