Simple Quasi-Market
Model was written in NetLogo 6.4.0
•
Viewed 471 times
•
Downloaded 0 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Info tab cannot be displayed because of an encoding error
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
breed [students student] breed [schools school] students-own [ social-class ; "favorise", "moyen", ou "defavorise" year ; année scolaire (1-6) tolerance ; seuil de tolérance my-school ; école assignée waiting ; en attente d'une place ou non ] schools-own [ capacity-per-year ; capacité par année (60 places en 1ère année, etc.) nb-favorises nb-moyens nb-defavorises ] to setup clear-all ; Création des écoles create-schools 4 [ set shape "house" set color 9.9 set capacity-per-year 60 set nb-favorises 0 set nb-moyens 0 set nb-defavorises 0 set size 3 ; Positionnement en carré if who = 0 [ setxy -10 10 ] ; Nord-Ouest if who = 1 [ setxy 10 10 ] ; Nord-Est if who = 2 [ setxy -10 -10 ] ; Sud-Ouest if who = 3 [ setxy 10 -10 ] ; Sud-Est ] reset-ticks end to go ; Faire avancer les élèves d'une année (sauf les nouveaux) ask students with [year > 0] [ set year year + 1 if year > 6 [ die ] ; Les élèves sortent du système après 6 ans ] ; Créer de nouveaux élèves create-students 100 [ set shape "person" set size 1 set year 1 set waiting true ; Assigner une classe sociale aléatoirement (distribution égale) set social-class one-of ["favorise" "moyen" "defavorise"] ; Définir la couleur selon la classe sociale if social-class = "favorise" [ set color red ] if social-class = "moyen" [ set color green ] if social-class = "defavorise" [ set color blue ] ; Définir le seuil de tolérance selon la classe sociale if social-class = "favorise" [ set tolerance tolerance-favorises ] if social-class = "moyen" [ set tolerance tolerance-moyens ] if social-class = "defavorise" [ set tolerance tolerance-defavorises ] ] ; Phase 1 : Les nouveaux élèves choisissent leur école préférée ask students with [waiting = true] [ choose-preferred-school ] ; Phase 2 : Les écoles sélectionnent les élèves selon leurs critères ask schools [ select-students ] ; Mettre à jour les statistiques des écoles update-school-stats tick end to choose-preferred-school ifelse count students = 0 or tolerance = 1 ; Si premiers élèves OU tolérance totale [ ; Attribution purement aléatoire move-to one-of schools ] [ ; Sinon, utiliser le système de préférences let school0-discomfort calculate-discomfort self school 0 let school1-discomfort calculate-discomfort self school 1 let school2-discomfort calculate-discomfort self school 2 let school3-discomfort calculate-discomfort self school 3 let min-discomfort min (list school0-discomfort school1-discomfort school2-discomfort school3-discomfort) if min-discomfort = school0-discomfort [ move-to school 0 ] if min-discomfort = school1-discomfort [ move-to school 1 ] if min-discomfort = school2-discomfort [ move-to school 2 ] if min-discomfort = school3-discomfort [ move-to school 3 ] ] end to-report calculate-discomfort [student-agent school-agent] let total-students ([nb-favorises + nb-moyens + nb-defavorises] of school-agent) if total-students = 0 [ report 0 ] let discomfort 0 let my-class [social-class] of student-agent let my-tolerance [tolerance] of student-agent ; Les favorisés regardent la proportion d'élèves non-favorisés if my-class = "favorise" [ let prop-non-favorises (([nb-moyens + nb-defavorises] of school-agent) / total-students) ifelse prop-non-favorises > my-tolerance [ set discomfort 1 ] [ set discomfort prop-non-favorises / my-tolerance ] ] ; Les moyens regardent la proportion d'élèves aux extrêmes if my-class = "moyen" [ let prop-extremes (([nb-favorises + nb-defavorises] of school-agent) / total-students) ifelse prop-extremes > my-tolerance [ set discomfort 1 ] [ set discomfort prop-extremes / my-tolerance ] ] ; Les défavorisés regardent la proportion d'élèves non-défavorisés if my-class = "defavorise" [ let prop-non-defavorises (([nb-favorises + nb-moyens] of school-agent) / total-students) ifelse prop-non-defavorises > my-tolerance [ set discomfort 1 ] [ set discomfort prop-non-defavorises / my-tolerance ] ] report discomfort end to select-students let year1-students students-here with [waiting = true] if count year1-students > capacity-per-year [ let selected-students nobody ifelse selectivite-ecoles = 0 [ ; Mode aléatoire pur set selected-students n-of capacity-per-year year1-students ][ ; Mode avec sélection selon composition sociale ; Déterminer le type majoritaire dans l'école let major-type "favorise" if nb-moyens > nb-favorises and nb-moyens > nb-defavorises [ set major-type "moyen" ] if nb-defavorises > nb-favorises and nb-defavorises > nb-moyens [ set major-type "defavorise" ] ; Première vague : type majoritaire let first-priority year1-students with [social-class = major-type] ; Mélanger entre prioritaires et non-prioritaires selon le niveau de sélectivité let nb-prioritaires floor (capacity-per-year * selectivite-ecoles) let nb-random floor (capacity-per-year * (1 - selectivite-ecoles)) ; Sélectionner d'abord les prioritaires ifelse count first-priority <= nb-prioritaires [ set selected-students first-priority set nb-random (capacity-per-year - count first-priority) ][ set selected-students n-of nb-prioritaires first-priority ] ; Compléter avec des élèves aléatoires parmi les non-sélectionnés let remaining-students year1-students with [not member? self selected-students] if any? remaining-students and nb-random > 0 [ set selected-students (turtle-set selected-students n-of (min list nb-random count remaining-students) remaining-students) ] ] ; Les élèves sélectionnés restent, les autres doivent partir ask year1-students [ ifelse member? self selected-students [ set waiting false set my-school myself ; Position autour de l'école fd 3 rt random 360 ][ ; Aller à une autre école si possible let other-possible-schools schools with [ self != myself and count students-here with [waiting = true] < capacity-per-year ] if any? other-possible-schools [ move-to min-one-of other-possible-schools [ calculate-discomfort myself self ] ] ] ] ] end to update-school-stats ask schools [ set nb-favorises count students-here with [social-class = "favorise"] set nb-moyens count students-here with [social-class = "moyen"] set nb-defavorises count students-here with [social-class = "defavorise"] ] ; Calcul de l'indice de Duncan pour les défavorisés let total-defavorises sum [nb-defavorises] of schools let total-autres sum [nb-favorises + nb-moyens] of schools let duncan-index 0 if total-defavorises > 0 and total-autres > 0 [ set duncan-index 0.5 * sum [ abs( (nb-defavorises / total-defavorises) - ((nb-favorises + nb-moyens) / total-autres) ) ] of schools ] ; Mise à jour du graphique set-current-plot "Indice de ségrégation (défavorisés)" plot duncan-index end
There are 2 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Simple Quasi-Market.png | preview | Preview for 'Simple Quasi-Market' | 14 days ago, by Nathanaël Friant | Download |
This model does not have any ancestors.
This model does not have any descendants.