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