Systèmes Complexes : Une introduction par la pratique
Le site web du livre
Atelier 3 : Réseaux sociaux
Liens directs au sous-sections :
- 3.2 Réseaux homogènes d'amitiés : réseau aléatoire
- 3.3 Comment propager l'information à l'ensemble de la communauté ?
- 3.4 Réseaux petit monde
- 3.5 Réseaux sans échelle caractéristique
3.2 Réseaux homogènes d'amitiés : réseau aléatoire
to setup clear-all set-default-shape turtles "circle" create-turtles 1 [ setxy random-xcor random-ycor set color blue ] reset-ticks end to go ajouter-etudiant tick end to ajouter-etudiant create-turtles 1 [ setxy random-xcor random-ycor set color blue create-links-with other turtles with [ random-float 1.0 < p ] ] end to spatialisation let len (max-pxcor - min-pxcor) / (2 * sqrt count turtles) repeat 3 [ layout-spring (turtles with [any? link-neighbors]) links 0.5 len 2 display ] endhaut
3.3 Comment propager l'information à l'ensemble de la communauté ?
turtles-own [ etat ancien-etat ] globals [ nb-informe temps-propagation ] to setup clear-all set-default-shape turtles "circle" create-turtles 1 [ setxy random-xcor random-ycor set color blue ] reset-ticks end to setup-information ask turtles [ nonInforme self ] set nb-informe 0 set temps-propagation 0 end to informe [ a ] ask a [ set etat "I" set color red ] end to nonInforme [ a ] ask a [ set etat "NI" set color blue ] end to go ajouter-etudiant tick end to ajouter-etudiant create-turtles 1 [ setxy random-xcor random-ycor nonInforme self create-links-with other turtles with [ random-float 1.0 < p ] ] end to select-un-informe if nb-informe < count turtles [ let i nobody while [ i = nobody ] [ while [ not mouse-down? ] [ ] let a turtles-on (patch mouse-xcor mouse-ycor) set i one-of a with [ etat = "NI" ] ] informe i set nb-informe nb-informe + 1 ] end to select-un-informe-alea if nb-informe < count turtles [ let i one-of turtles with [ etat = "NI" ] informe i set nb-informe nb-informe + 1 ] end to propage-information ask turtles [ set ancien-etat etat ] let ancien-nb-informe nb-informe ask turtles with [ ancien-etat = "I" ] [ ask link-neighbors with [ etat = "NI" ] [ informe self set nb-informe nb-informe + 1 ] ] if ancien-nb-informe < nb-informe [ set temps-propagation temps-propagation + 1 ] end to spatialisation let len (max-pxcor - min-pxcor) / (2 * sqrt count turtles) repeat 3 [ layout-spring (turtles with [any? link-neighbors]) links 0.5 len 2 display ] endhaut
3.4 Réseaux petit monde
turtles-own [ cc dist ] globals [ infini distance-moyenne coefficient-agglomeration ] to setup clear-turtles set-default-shape turtles "circle" set infini 999999 reset-ticks end to go clear-turtles ajouter-etudiants calcul-stats end to ajouter-etudiants create-turtles n [ setxy random-xcor random-ycor ] ask turtles [ set color blue ] liens-courts liens-longs end to liens-courts ifelse count turtles > k-plus-proche [ ask turtles [ let l min-n-of k-plus-proche (other turtles) [ distance myself ] create-links-with l [ set color blue ] ] ] [ ask turtles [ create-links-with other turtles [ set color blue ] ] ] end to liens-longs let l-prob [] ask turtles [ set l-prob [] let i 0 while [ i < count turtles ] [ let d distance turtle i ifelse d = 0 [ set l-prob lput 0 l-prob ] [ set l-prob lput (1 / exp (r * ln d)) l-prob ] set i i + 1 ] set i 0 while [ i < q ] [ let t turtle roue l-prob if self != t [ create-link-with t [ set color green ] ] set i i + 1 ] ] end to-report roue [ l ] let s sum l let rnd random-float s let i 0 let cumul item i l while [ cumul < rnd ] [ set i i + 1 set cumul cumul + item i l ] report i end to calcul-stats calcul-coefficient-agglomeration calcul-distances end to-report voisin? [ voisinage ] report ( member? end1 voisinage and member? end2 voisinage ) end to calcul-coefficient-agglomeration let total 0 ask turtles [ ifelse count link-neighbors <= 1 [ set cc "non-defini" ] [ let voisinage link-neighbors set cc (2 * count links with [ voisin? voisinage ] / ((count voisinage) * (count voisinage - 1)) ) set total total + cc ] ] let nb-sup1 count turtles with [count link-neighbors > 1] ifelse nb-sup1 = 0 [ set coefficient-agglomeration 0 ] [ set coefficient-agglomeration total / nb-sup1 ] end to setup-dijkstra [ source ] ask source [ ask other turtles [ set dist infini ] set dist 0 ] end to distance-dijkstra [ source ] setup-dijkstra source let A turtles while [ any? A ] [ let s min-one-of A [ dist ] ask s [ set A other A ; reduction de l'ensemble A = A - { s } let d dist ask link-neighbors [ if dist > d + 1 [ set dist d + 1 ] ] ] ] end to calcul-distances let d 0 let connecte? true ask turtles [ distance-dijkstra self ask other turtles [ ifelse dist != infini [ set d d + dist ] [ set connecte? false ] ] ] ifelse connecte? [ set distance-moyenne d / (count turtles * (count turtles - 1)) ] [ set distance-moyenne infini ] endhaut
3.5 Réseaux sans échelle caractéristique
to setup clear-all set-default-shape turtles "circle" create-turtles 1 [ set color blue setxy (max-pxcor + min-pxcor) / 2 (max-pycor + min-pycor) / 2 ] reset-ticks end to go ajouter-etudiant tick end to-report liens-avec-preference ifelse count other turtles <= m [ report other turtles ] [ let l-prob [] let i 0 while [ i < count turtles - 1 ] [ let preference count [ link-neighbors ] of turtle i set l-prob lput preference l-prob set i i + 1 ] let L [] let j 0 while [ j < m ] [ let k roue l-prob set L fput k L set l-prob replace-item k l-prob 0 set j j + 1 ] report turtles with [ member? who L ] ] end to-report liens-sans-preference ifelse count other turtles <= m [ report other turtles ] [ report n-of m other turtles ] end to ajouter-etudiant create-turtles 1 [ let L no-turtles ifelse preference? [ set L liens-avec-preference ] [ set L liens-sans-preference ] ask L [ create-link-with myself ] move-to one-of link-neighbors forward 4 set color blue ] end to ajouter-n-etudiants while [ count turtles < n ] [ ajouter-etudiant tick ] end to-report roue [ l ] let s sum l let rnd random-float s let i 0 let cumul item i l while [ cumul < rnd ] [ set i i + 1 set cumul cumul + item i l ] report i end to tracer-lin let max-degre max [count link-neighbors] of turtles set-current-plot "Distribution" plot-pen-reset set-plot-x-range 0 (max-degre + 1) histogram [count link-neighbors] of turtles end to tracer-log let max-degre max [count link-neighbors] of turtles set-current-plot "Distribution (log-log)" plot-pen-reset let deg 1 while [ deg <= max-degre ] [ let noeud-deg turtles with [ count link-neighbors = deg ] if any? noeud-deg [ plotxy (log deg 10) (log count noeud-deg 10) ] set deg deg + 1 ] end to dimensionner-noeud ask turtles [ set size log (1 + count link-neighbors) 4 ] end to spatialisation let l (max-pxcor - min-pxcor) / (2 * log (1 + count turtles) 2) repeat 3 [ layout-spring (turtles with [any? link-neighbors]) links (l-vide / l) l (repulsion / l) display ] end to reduire let x-centre (max-pxcor + min-pxcor) / 2 let y-centre (max-pycor + min-pycor) / 2 ask turtles [ setxy (x-centre + 0.9 * (xcor - x-centre)) (y-centre + 0.9 * (ycor - y-centre)) ] endhaut