Systèmes Complexes : Une introduction par la pratique
Le site web du livre
Atelier 6 : Intelligence collective
Liens directs au sous-sections :
- 6.2 Un unique gradient relatif à la zone de rassemblement
- 6.3 Gradient de ressources
- 6.4.1 Zone de ressources unique
- 6.4.2 Deux zones de ressources situées à la même distance du centre
- 6.4.3 Zones de ressources de tailles identiques situées à des distances différentes
6.2 Un unique gradient relatif à la zone de rassemblement
globals[ nombre-agents distance-rassemblement-ressource ] patches-own [ p-rassemblement ] to setup-zone-rassemblement ask patches [ set p-rassemblement (max-pxcor - distancexy 0 0) set pcolor scale-color blue p-rassemblement 0 max-pxcor ] end to-report zone-rassemblement? let rayon 6 report (distancexy 0 0 <= rayon) end o setup-zone-ressource let epaisseur 6 ask patches [ let d distance (patch 0 0) if (0 <= (d - distance-rassemblement-ressource) and (d - distance-rassemblement-ressource) <= epaisseur) [ set plabel "+" set plabel-color red ] ] end to-report zone-ressource? report (plabel != "") end to setup clear-all setup-zone-rassemblement setup-zone-ressource setup-turtles reset-ticks end to setup-turtles create-turtles nombre-agents [ setxy 0 0 set shape "arrow" set color yellow set size 2.5 ] end to go ask turtles [ ifelse (porte-ressource?) [chercher-rassemblement] [chercher-ressource]] tick tracer end to-report porte-ressource? report label != "" end to chercher-rassemblement ifelse (zone-rassemblement?) [livrer-ressource] [aller-vers-rassemblement] end to chercher-ressource ifelse (zone-ressource?) [prendre-ressource] [aller-vers-ressource] end to aller-vers-rassemblement let angle 10 set heading heading + (random angle) - (angle / 2) forward 1 + random-float 1 end to aller-vers-rassemblement let p (patch-set patch-right-and-ahead 45 2 patch-right-and-ahead 0 2 patch-left-and-ahead 45 2) face max-one-of p [p-rassemblement] forward 1 + random-float 1 end to aller-vers-ressource let angle 10 set heading heading + (random angle) - (angle / 2) forward 1 + random-float 1 end to prendre-ressource set label plabel set label-color red set plabel "" set plabel-color black end to livrer-ressource forward random 6 set heading (random 360) set label "" set label-color black set pcolor red end to tracer plot (count turtles with [porte-ressource?]) / nombre-agents endhaut
6.3 Gradient de ressources
globals[ nombre-agents distance-rassemblement-ressource taux-diffusion-p-ressource taux-resorption-p-ressource ] patches-own [ p-rassemblement p-ressource ] turtles-own [ ; temps-de-portage ] to setup clear-all set distance-rassemblement-ressource 80 set nombre-agents 200 set taux-diffusion-p-ressource 0.80 set taux-resorption-p-ressource 0.04 setup-zone-rassemblement setup-zone-ressource setup-turtles reset-ticks end to chercher-rassemblement ifelse (zone-rassemblement?) [livrer-ressource] [deposer-p-ressource aller-vers-rassemblement] end to prendre-ressource set label plabel set label-color red set plabel "" set plabel-color black ;set temps-de-portage 0 end set p-ressource p-ressource + max-pxcor ^ 2 ;set p-ressource p-ressource + (max-pxcor - 1.9 * temps-de-portage) ^ 2 end to aller-vers-rassemblement let p (patch-set patch-right-and-ahead 45 2 patch-right-and-ahead 0 2 patch-left-and-ahead 45 2) face max-one-of p [p-rassemblement] forward 1 + random-float 1 ; set temps-de-portage temps-de-portage + 1 end to aller-vers-ressource let p (patch-set patch-right-and-ahead 45 2 patch-right-and-ahead 0 2 patch-left-and-ahead 45 2) face max-one-of p [p-ressource] forward 1 + random-float 1 end to go ask turtles [ ifelse (porte-ressource?) [chercher-rassemblement] [chercher-ressource] ] diffuser-p-ressource resorber-p-ressource tick tracer end to diffuser-p-ressource diffuse p-ressource (taux-diffusion-p-ressource) end to resorber-p-ressource ask patches [ set p-ressource (p-ressource * (1 - taux-resorption-p-ressource)) if (p-ressource < 0.1) [set p-ressource 0] if (pcolor != red) [set pcolor scale-color green p-ressource 0 5000] ] endhaut
6.4.1 Zone de ressources unique
to setup-zone-ressource let rayon 6 ask patches with [ (distancexy distance-rassemblement-ressource 0) <= rayon] [ set plabel "+" set plabel-color red ] endhaut
6.4.2 Deux zones de ressources situées à la même distance du centre
to tracer set-current-plot-pen "ressources +" plot (count turtles with [label = "+"]) / nombre-agents set-current-plot-pen "ressources *" plot (count turtles with [label = "*"]) / nombre-agents end to setup-zone-ressource let rayon 6 ask patches with [(distancexy distance-rassemblement-ressource 0) <= rayon] [ set plabel "+" set plabel-color red ] ask patches with [(distancexy (- distance-rassemblement-ressource) 0) <= rayon] [ set plabel "*" set plabel-color red ] end to setup-zone-ressource let rayon 6 ask patches with [(distancexy distance-rassemblement-ressource 0) <= 2 * rayon] [ set plabel "+" set plabel-color red ] ask patches with [(distancexy (- distance-rassemblement-ressource) 0) <= rayon] [ set plabel "*" set plabel-color red ] endhaut
6.4.3 Zones de ressources de tailles identiques situées à des distances différentes
to setup-zone-ressource let rayon 6 let delta-distance 30 ask patches with [(distancexy distance-rassemblement-ressource 0) <= rayon] [ set plabel "+" set plabel-color red ] ask patches with [(distancexy (delta-distance - distance-rassemblement-ressource) 0) <= rayon] [ set plabel "*" set plabel-color red ] end to setup-zone-ressource let rayon 6 ask patches with [(distancexy distance-rassemblement-ressource 0) <= rayon] [ set plabel "+" set plabel-color red ] ask patches with [(distancexy (- distance-rassemblement-ressource) 90) <= rayon] [ set plabel "*" set plabel-color red ] ask patches with [(distancexy (- distance-rassemblement-ressource) -45) <= rayon] [ set plabel "-" set plabel-color red ] endhaut