Table des matières - Gilles Daniel

Table des matières - Gilles Daniel Table des matières - Gilles Daniel

gillesdaniel.com
from gillesdaniel.com More from this publisher
01.01.2015 Views

388 Modélisation et simulation multi-agents pour Sciences de l'Homme et de la Société. D’un point de vue technique, le déroulement d’une itération ne peut s’effectuer totalement en mode synchrone. Seule l’évaluation de la situation peut se faire dans ce mode : - création de la liste des habitations vacantes, non habitées [procédure CréerListeHabitationsLibres, liste ListeHabitationslibres] ; - chaque agent observe son voisinage, l’opération consiste à dénombrer le nombre d’étrangers dans un voisinage d’ordre 1 [procédure ObserveVoisinage] ; - chaque agent compare le seuil de tolérance à ses observations afin de décider si oui ou non il doit déménager [procédure Demenage ]. Si la réponse est oui, son nom vient s’ajouter à la liste des agents qui doivent partir [liste ListeInsatisfaits] ; Les déplacements ne peuvent s’exécuter en mode synchrone, car plusieurs habitants insatisfaits pourraient alors se déplacer sur une même cellule libre. Tout agent dans la liste ListeInsatisfaits sélectionne au hasard une habitation libre dans la liste ListeHabitationslibres et s’y rend. Il sort alors de la liste des insatisfaits, supprime sa nouvelle adresse de la liste des habitations libres et rajoute dans cette liste son ancienne adresse, qui est maintenant vacante. Lorsque la liste ListeInsatisfait est vide, l’itération est terminée, on répète la procédure. En mode asynchrone, la procédure est légèrement différente : - création de la liste des habitations vacantes, non habitées [procédure CréerListeHabitationsLibres, liste ListeHabitationslibres] ; - création de la liste de tous les agents présents dans l’univers [liste ListeAgents] ; - on répète les procédures suivantes jusqu’à ce que ListeAgents soit vide : • sélection au hasard d’un agent dans la liste, • il observe son voisinage [procédure ObserveVoisinage], • et en fonction de sa satisfaction reste ou part [procédure Demenage ]. La différence entre ces deux variantes est donc que dans la première, au cours d’une itération, seuls se déplacent les individus qui ne sont pas satisfaits, critère défini par une « image de la réalité » à un moment donné, identique pour tous. Dans la deuxième, en mode asynchrone, on traite tous les individus les uns après les autres, à des instants distincts, et l’évaluation de l’environnement se fait sur une « image de la réalité » à cet instant, valable pour l’individu sélectionné. C’est ce dernier mode qui a été choisi, les différentes procédures sont détaillées dans les paragraphes qui suivent 80 . 80 Les termes en gras représentent les primitives StarLogo, en « normal » les mots du langage auteur.

Comparaison de trois implémentations du modèle de Schelling. 389 La procédure ListeHabitationLibre permet de créer la liste complète des cellules qui ne sont pas habitées : to CréerListeHabitationsLibres set ListeHabitationslibres [ ] ; La liste est vide au départ ask-patches [ if count-turtles-here = 0 [ ; s’il n’y a pas d’habitant let [:k (((xcor + screen-half-height) * screen-width ) + (ycor + screen-half-width) )] ;on calcule le numéro de cellule set ListeHabitationslibres lput :k ListeHabitationslibres]] ] ; et on l’insère dans la liste end La procédure ObserveVoisinage permet à chaque agent de comptabiliser le nombre d’étrangers dans le voisinage, on utilise ici l’opérateur de voisinage présenté précédemment. To ObserveVoisinage set idem 0 ; remise à zéro en t pour ne pas cumuler avec (t – n) let [:a breed-at 0 1] ; on commence par observer au nord if (:a != breed) and ; si l’habitant n’est pas du même groupe (:a != 0) ; et qu’il y a un habitant [set diff diff + 1]] ; alors j’incrémente la variable d’état let [:a breed-at 1 1] ; même opération, pour la cellule au nord-est if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at 1 0] ; idem, pour la cellule à l’est if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at 1 -1] ;cellule au sud-est if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at 0 -1] ; cellule au sud if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at -1 -1] ; cellule au sud-ouest if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at -1 0] ; cellule à l’ouest if (:a != breed) and (:a != 0) [set diff diff + 1] ] let [:a breed-at -1 1] ; cellule au nord-ouest if (:a != breed) and (:a != 0) [set diff diff + 1] ] end La procédure Demenage détermine si l’agent doit quitter ou non la cellule en fonction du seuil de tolérance fixé. to Demenage if diff > ((Tolerance / 100) * 8) [ChoisirHabitation] end La procédure ChoisirHabitation est appelée par tout individu répondant « vrai » au test précédent (procédure Demenage). L’agent tire au hasard une cellule non habitée dans la liste des habitations libres, la supprime de la liste et y rajoute le

388 Modélisation et simulation multi-agents pour Sciences de l'Homme et de la Société.<br />

D’un point de vue technique, le déroulement d’une itération ne peut s’effectuer<br />

totalement en mode synchrone. Seule l’évaluation de la situation peut se faire dans<br />

ce mode :<br />

- création de la liste <strong>des</strong> habitations vacantes, non habitées [procédure<br />

CréerListeHabitationsLibres, liste ListeHabitationslibres] ;<br />

- chaque agent observe son voisinage, l’opération consiste à dénombrer le<br />

nombre d’étrangers dans un voisinage d’ordre 1 [procédure ObserveVoisinage] ;<br />

- chaque agent compare le seuil de tolérance à ses observations afin de décider si<br />

oui ou non il doit déménager [procédure Demenage ]. Si la réponse est oui, son<br />

nom vient s’ajouter à la liste <strong>des</strong> agents qui doivent partir [liste ListeInsatisfaits] ;<br />

Les déplacements ne peuvent s’exécuter en mode synchrone, car plusieurs<br />

habitants insatisfaits pourraient alors se déplacer sur une même cellule libre. Tout<br />

agent dans la liste ListeInsatisfaits sélectionne au hasard une habitation libre dans la<br />

liste ListeHabitationslibres et s’y rend. Il sort alors de la liste <strong>des</strong> insatisfaits,<br />

supprime sa nouvelle adresse de la liste <strong>des</strong> habitations libres et rajoute dans cette<br />

liste son ancienne adresse, qui est maintenant vacante. Lorsque la liste<br />

ListeInsatisfait est vide, l’itération est terminée, on répète la procédure.<br />

En mode asynchrone, la procédure est légèrement différente :<br />

- création de la liste <strong>des</strong> habitations vacantes, non habitées [procédure<br />

CréerListeHabitationsLibres, liste ListeHabitationslibres] ;<br />

- création de la liste de tous les agents présents dans l’univers [liste<br />

ListeAgents] ;<br />

- on répète les procédures suivantes jusqu’à ce que ListeAgents soit vide :<br />

• sélection au hasard d’un agent dans la liste,<br />

• il observe son voisinage [procédure ObserveVoisinage],<br />

• et en fonction de sa satisfaction reste ou part [procédure Demenage ].<br />

La différence entre ces deux variantes est donc que dans la première, au cours<br />

d’une itération, seuls se déplacent les individus qui ne sont pas satisfaits, critère<br />

défini par une « image de la réalité » à un moment donné, identique pour tous. Dans<br />

la deuxième, en mode asynchrone, on traite tous les individus les uns après les<br />

autres, à <strong>des</strong> instants distincts, et l’évaluation de l’environnement se fait sur une<br />

« image de la réalité » à cet instant, valable pour l’individu sélectionné. C’est ce<br />

dernier mode qui a été choisi, les différentes procédures sont détaillées dans les<br />

paragraphes qui suivent 80 .<br />

80 Les termes en gras représentent les primitives StarLogo, en « normal » les mots du langage<br />

auteur.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!