01.01.2015 Views

Table des matières - Gilles Daniel

Table des matières - Gilles Daniel

Table des matières - Gilles Daniel

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Comparaison de trois implémentations du modèle de Schelling. 389<br />

La procédure ListeHabitationLibre permet de créer la liste complète <strong>des</strong> cellules<br />

qui ne sont pas habitées :<br />

to CréerListeHabitationsLibres<br />

set ListeHabitationslibres [ ] ; La liste est vide au départ<br />

ask-patches [<br />

if count-turtles-here = 0 [ ; s’il n’y a pas d’habitant<br />

let [:k (((xcor + screen-half-height) * screen-width ) +<br />

(ycor + screen-half-width) )] ;on calcule le numéro de cellule<br />

set ListeHabitationslibres lput :k ListeHabitationslibres]]<br />

] ; et on l’insère dans la liste<br />

end<br />

La procédure ObserveVoisinage permet à chaque agent de comptabiliser le<br />

nombre d’étrangers dans le voisinage, on utilise ici l’opérateur de voisinage présenté<br />

précédemment.<br />

To ObserveVoisinage<br />

set idem 0 ; remise à zéro en t pour ne pas cumuler avec (t – n)<br />

let [:a breed-at 0 1] ; on commence par observer au nord<br />

if (:a != breed) and ; si l’habitant n’est pas du même groupe<br />

(:a != 0)<br />

; et qu’il y a un habitant<br />

[set diff diff + 1]] ; alors j’incrémente la variable d’état<br />

let [:a breed-at 1 1] ; même opération, pour la cellule au nord-est<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at 1 0]<br />

; idem, pour la cellule à l’est<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at 1 -1]<br />

;cellule au sud-est<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at 0 -1]<br />

; cellule au sud<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at -1 -1]<br />

; cellule au sud-ouest<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at -1 0]<br />

; cellule à l’ouest<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

let [:a breed-at -1 1]<br />

; cellule au nord-ouest<br />

if (:a != breed) and (:a != 0) [set diff diff + 1] ]<br />

end<br />

La procédure Demenage détermine si l’agent doit quitter ou non la cellule en<br />

fonction du seuil de tolérance fixé.<br />

to Demenage<br />

if diff > ((Tolerance / 100) * 8) [ChoisirHabitation]<br />

end<br />

La procédure ChoisirHabitation est appelée par tout individu répondant « vrai »<br />

au test précédent (procédure Demenage). L’agent tire au hasard une cellule non<br />

habitée dans la liste <strong>des</strong> habitations libres, la supprime de la liste et y rajoute le

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

Saved successfully!

Ooh no, something went wrong!