Modélisation à base d’agents
Modélisation entité-centrée
Modélisation discrète d’un ensemble d’ entités
Modélisation « comportementale »
– description des actions locales de ces entités
– description des interactions locales entre les entités
Netlogo pour la modélisation & la – description des interactions locales entre les entités et leur environnement
simulation à base d’agents
Modélisation orientée-espace
Modélisation spatiale de l’ environnement des entités
Modélisation « géométrique »
– description des propriétés spatiales de l’environnement
– support du déplacement des entités
– support des relations de voisinage entre les entités
Modélisation « comportementale »
– description de la dynamique propre de l’environnement
– support de la diffusion de traces déposées par les entités
Modélisation comportementale Modélisation géométrique
Logo & les tortues Automates cellulaires
langage créé en 1967 par W. Feurzeig et S. Papert développés dans les anneés 40 par
objectif éducatif – S. M. Ulam : constructions graphiques engendrées à partir de règles simples
– simplicité du langage J. von Neumann : conception d’une machine auto-réplicatrice, le kinématon
– feedback visuel permettant le débuggage
– tortue robotisée (Irving) Propriétés
Discrétisation
to square
– spatiale : espace décomposé en une grille de cellules
repeat 4 [forward 50 right 90 ]
– temporelle : évolution par pas de temps discrets
end
Parallélisme
– les cellules évoluent simultanément et de manière indépendante
to flower Localité
repeat 36 [right 10 square] – chaque cellule évolue en fonction de son propre état et de celui d’un ensemble
end fini de cellules voisines
Homogénéité
– la topologie des cellules est régulière
to spiral :size :angle – la relation de voisinage est uniforme
if :size > 100 [stop] – les règles de transition sont identiques pour toutes les cellules
forward :size
right :angle
spiral :size + 2 :angle
end
Modélisation géométrique Modélisation géométrique
Automate à 1 dimension Automate à 2 dimensions
Caractéristiques Modèle de réaction-diffusion
tableau de cellules à une dimension développé par A. Turing (début des années 50)
chaque cellule prend ses valeurs dans l’ensemble {0, 1} proposé comme cause de différents patterns liés à l'embryogenèse
le voisinage d’une cellule se réduit aux deux cellules adjacentes
Combinaison de
règles de transition simples
– l’automate progresse par générations successives une réaction dans chaque cellule entre des substances chimiques qui se
– l’état d’une cellule à la génération suivante est fonction de son état et de l’état comportent comme des activateurs et des inhibiteurs
de ses voisines à la génération courante la diffusion des substances entre cellules voisines
– toutes les cellules changent d’état de manière synchrone
Exemple
– f(111)=0 f(110)=0 "a #a 2 "2 a
= $ µa a + Da 2 + # 0
– f(101)=0 f(100)=1 "t h "x
– f(011)=0 f(010)=0 "h "2 h
= #' a 2 $ µh h + Dh 2
– f(001)=1 f(000)=0 "t "x
modélise un processus de diffusion simple !
[Meinhardt & Klingler 1987]
! Modèle de formation de patterns périodiques
[Meinhardt]
1
NetLogo NetLogo : les entités du modèle
([Link]/netlogo)
« Environnement de modélisation programmable pour la
simulation de phénomènes naturels et sociaux » Des cellules (patchs)
permet le prototypage rapide de modèles de systèmes complexes réparties selon une grille carrée fixe : pxcor, pycor, pzcor
support de diffusion de signaux vers les cellules voisines : diffuse,
Extension du langage Logo neighbors
support des agents et de la concurrence
très large répertoire de primitives prédéfinies Des agents (turtles)
localisés dans l’environnement : xcor, ycor, zcor
Caractéristiques de la plate-forme visibles : color, shape, size, label
constructeur d’interfaces mobiles : forward (fd), back (bk), left (lt), right (rt)
visualisation en 2D et/ou 3D de différentes espèces : breed
tracé de graphes sensibles à l’environnement : uphill, downhill, patch-at
inspection des agents sensibles aux autres agents : turtles-here, turtles-at
éditeur de formes capacités d’action : stamp
calibrage
import et export Un ordonnanceur (observer)
simulations participatives en réseau
contrôle le déroulement de la simulation
très grande librairie de modèles
gère l’activation des cellules et des agents
NetLogo : la modélisation de l’espace et du temps Retour sur l’automate 1D (1/2)
Modélisation discrète de l’espace
;; déclaration de variables
quadrillage de cellules carrées globals [ row ]
patches-own [ on? ]
;; initialisation - procédure d’observer
to setup
clear-all ;; réinitialise l’affichage
set row max-pycor ;; initialise la ligne courante
ask patches with [pycor = row] ;; initialise la première ligne de cellules
[
set on? (random 2 = 0) ;; initialise l’état de la cellule
color-patch ;; peint la cellule en noir ou en blanc
]
end
;; mise à jour de la couleur des patchs - procédure de patch
to color-patch
ifelse on? ;; si la cellule est allumée
[ set pcolor white ] ;; colorie la cellule en blanc
Modélisation discrète du temps [ set pcolor black ] ;; sinon colorie la cellule en noir
end
déroulement de la simulation par itérations successives
la procédure setup initialise le modèle
la procédure go appelée de manière répétitive exécute la simulation
Retour sur l’automate 1D (2/2) Retour sur l’automate 2D (1/2)
;; exécute une itération de la simulation - procédure d’observer ;; déclaration de variables
to go patches-own [a h si]
ask patches with [ pycor = row ] ;; applique la règle sur la ligne courante
[ ;; initialisation
let left-on? on?-of patch-at -1 0 ;; la cellule gauche est-elle allumée ? to setup
let right-on? on?-of patch-at 1 0 ;; la cellule droite est-elle allumée ? ca
ask patches [
;; met à jour la cellule du dessous en fonction de l’état de la cellule set a 1 ;; initialise l’activateur
;; et de ses deux voisines set h 1 ;; initialise l’inhibiteur
set on?-of patch-at 0 -1 set si RA * (0.99 + random-float 0.02) ;; un peu d’hétérogénéité
( left-on? and (not on?) and (not right-on?)) or color-patch ;; colorie les patchs
((not left-on?) and (not on?) and right-on?) ]
] end
;; passe à la ligne suivante
set row (row - 1) ;; colorie les patchs en fonction de la concentration en activateur ou
;; met à jour la couleur des cellules qui viennent de changer d’état ;; inhibiteur
ask patches with [ pycor = row ] to color-patch
[ color-patch ] ifelse (a?)
end [ set pcolor scale-color green a 0 10 ] ;; affiche l’activateur
[ set pcolor scale-color red h 0 10 ] ;; affiche l’inhibiteur
end
2
Retour sur l’automate 2D (2/2) Un modèle plus complexe : proies et prédateurs
;; exécute une itération de la simulation
Le modèle de Lotka et Volterra [1926]
to go
;; demande à chaque patch de mettre à jour les quantités
;; d’activateur et d’inhibiteur en appliquant les équa. diffs.
ask patches [
set a a + si * (a * a + BA) / h - RA * a
set h h + si * a * a - RB * h
]
;; diffusion aux patchs voisins
diffuse a diff_a ;; de l’activateur
diffuse h diff_h ;; de l’inhibiteur
;; recolorie les patchs
ask patches [ color-patch ]
end Problèmes
besoin de tester les modèles et théories manipulées dans le domaine
besoin de représenter des niveaux différents
besoin de représenter les comportements des entités du système et pas
seulement le résultat de ces comportements
besoin d'expliquer l'émergence de structures spatio-temporelles
besoin d’enrichir les modèles de manière incrémentale
Comparaison modèle discret / modèle continu Modèle agent : des loups et des moutons
Des interactions localisées ou un calcul global peuvent
conduire à des dynamiques qualitativement différentes
« Dans des conditions où les équations continues prédisent l’extinction de
la population, les individus s’auto-organisent en zones adaptatives
spatio-temporellement localisées, ce qui assure leur survie et leur
développement » [Shnerb et al., PNAS 2000]
Déclarations de variables Initialisation
;; déclaration d’une nouvelle espèce « moutons » to setup
breed [ sheep a-sheep ] ca
;; déclaration d’une nouvelle espèce « loups » ask patches [
breed [ wolves wolf ] set countdown random grass-regrowth-time
turtles-own [ energy ] ifelse (random 2) = 0 [ set pcolor brown ][ set pcolor green ]
;; pour éviter que deux loups n’attrapent le même mouton ]
sheep-own [ grabbed? ]
;; compte à rebours avant la repousse de l’herbe set-default-shape sheep "sheep »
patches-own [ countdown ] ;; création & initialisation d’agents moutons
create-custom-sheep initial-number-sheep [
set energy random (2 * sheep-gain-from-food)
turtles setxy random-xcor random-ycor
energy set grabbed? false
]
;; création & initialisation d’agents loups
sheep wolves set-default-shape wolves "wolf"
grabbed? create-custom-wolves initial-number-wolves [
set energy random (2 * wolf-gain-from-food)
setxy random-xcor random-ycor
]
do-plot
end
3
Boucle générale Comportements génériques
to go ;; tourne d’un angle compris entre -50 et +50° puis avance
;; teste si fin de la simulation to move
if not any? turtles [ stop ] rt random-float 50 - random-float 50
;; activation des moutons fd 1
ask sheep [ end
move
set energy energy - 1 ;; essaye de se reproduire
eat-grass to reproduce [ reproduce-rate ]
reproduce sheep-reproduce ;; tirage aléatoire
death if random-float 100 < reproduce-rate [
] ;; partage de l’énergie avec le descendant
;; activation des loups set energy (energy / 2)
ask wolves [ ;; création d’un clone
move hatch 1 [
set energy energy - 1 rt random-float 360
catch-sheep fd 1
reproduce wolf-reproduce ]
death ]
] end
;; activation de l’herbe
ask patches [ ;; meurt quand l’énergie devient nulle
grow-grass to death
] if energy < 0 [ die ]
do-plot end
end
Broutage et repousse de l’herbe Prédation
;; broutage ;; comportement de prédation
to eat-grass to catch-sheep
;; s’il y a de l’herbe (patch vert) ;; choisit un mouton au hasard sur le patch courant parmi ceux qui ne sont
if pcolor = green [ ;; pas déjà attrapés
;; colore le patch en brun let prey one-of (sheep-here with [not grabbed?])
set pcolor brown ;; si le loup en a attrapé un...
;; gagne de l’énergie if prey != nobody [
set energy energy + sheep-gain-from-food ;; il se le réserve,
] set grabbed?-of prey true
end ;; il demande (poliment) au mouton de mourir...
ask prey [ die ]
;; repousse de l’herbe ;; et il en retire plein de glucides, de lipides et de protéines
to grow-grass set energy energy + wolf-gain-from-food ]
;; si le patch est brun end
if pcolor = brown [
;; si le compteur arrive à 0
ifelse countdown <= 0
[ set pcolor green ;; l’herbe repousse
set countdown grass-regrowth-time ] ;; le compteur est réinitialisé
[ set countdown (countdown - 1) ] ;; décrémente le compteur
]
end
Affichage de courbes
;; procédure d’affichage
to do-plot
;; sélectionne le graphique
set-current-plot "populations »
;; sélectionne le tracé
set-current-plot-pen "sheep"
;; affiche un nouveau point
plot count sheep
;; sélectionne le tracé
set-current-plot-pen "wolves"
;; affiche un nouveau point
plot count wolves
;; sélectionne le tracé
set-current-plot-pen "grass / 4"
;; affiche un nouveau point
plot count patches with [ pcolor = green ] / 4
end