This page was automatically generated by NetLogo 5.0beta2. Questions, problems? Contact feedback@ccl.northwestern.edu.
The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Sun's Java site. If the display appear cut off with Firefox, then try another browser (Safari works).
powered by NetLogo
view/download model file: Ant-Foraging.nlogo
In this project, a colony of ants forages for food. Each ant follows a set of simple rules, but the colony as a whole acts in a sophisticated way.
When an ant finds a piece of food, it carries the food back to the nest, dropping a chemical as it moves. When other ants “sniff” the chemical, they follow the chemical toward the food. As more ants carry food to the nest, they reinforce the chemical trail.
Click the SETUP button to set up the ant nest (in violet, at center) and three piles of food. Click the GO button to start the simulation. The chemical is shown in a green-to-white gradient, the nest-scent in a red-to-white gradient.
The EVAPORATION-RATE slider controls the evaporation rate of the chemical. The DIFFUSION-RATE slider controls the diffusion rate of the chemical and nest scent. There is an on-off PLOT? switch. Turning off the plotting lets the model run faster.
The DISPLAY-FIELD chooser determines whether to display the chemical concentration or the nest-scent concentration.
The MAKE BARRIER button allows barriers to be drawn, which block the ants and diffusion of the chemical and nest scent. The REMOVE BARRIER allows some or all of the barriers to be erased. Click or hold the mouse button to draw or erase barriers.
The DEPOSIT FOOD button allows more food to be deposited. The kind of food to be deposited (“cyan,” “sky,” or “blue”) is determined by the FOOD-KIND chooser. Click or hold the mouse button to add food in particular places.
The ant colony generally exploits the food source in order, starting with the food closest to the nest, and finishing with the food most distant from the nest. It is more difficult for the ants to form a stable trail to the more distant food, since the chemical trail has more time to evaporate and diffuse before being reinforced.
Once the colony finishes collecting the closest food, the chemical trail to that food naturally disappears, freeing up ants to help collect the other food sources. The more distant food sources require a larger “critical number” of ants to form a stable trail.
The consumption of the food source is shown in a plot. In CYAN you see food1 which is on the right side of the world. In BLUE you see food2 which is on the lower left of the world. In MAGENTA you see food3 which is on the upper left of the world.
Try creating a barrier between a food source and the nest. How long does it take the ants to create a path around it? If you make a hole through the barrier (with REMOVE BARRIER), how long does it take the ants to discover it?
Try different placements for the food sources. What happens if two food sources are equidistant from the nest? When that happens in the real world, ant colonies typically exploit one source then the other (not at the same time).
In this project, the ants use a “trick” to find their way back to the nest: they follow the “nest scent.” Real ants use a variety of different approaches to find their way back to the nest. Try to implement some alternative strategies.
In the UPHILL-CHEMICAL procedure, the ant “follows the gradient” of the chemical. That is, it “sniffs” in three directions, then turns in the direction where the chemical is strongest. You might want to try variants of the UPHILL-CHEMICAL procedure, changing the number and placement of “ant sniffs.”
RETURN-TO-NEST uses a similar gradient.
Modified 2007-10-08 by B.J. MacLennan to simulate diffusion of nest-scent, to allow display of nest-scent, to allow insertion and removal of barriers, and to allow introduction of more food.
This model was developed at the MIT Media Lab. See Resnick, M. (1994) “Turtles, Termites and Traffic Jams: Explorations in Massively Parallel Microworlds.” Cambridge, MA: MIT Press. Adapted to StarLogoT, 1997, as part of the Connected Mathematics Project. Adapted to NetLogo, 2001, as part of the Participatory Simulations Project.
To refer to this model in academic publications, please use: Wilensky, U. (1998). NetLogo Ants model. http://ccl.northwestern.edu/netlogo/models/Ants. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
In other publications, please use: Copyright 1998 Uri Wilensky. All rights reserved. See http://ccl.northwestern.edu/netlogo/models/Ants for terms of use.
globals [ carrying-color free-color nest-xcor nest-ycor barrier-width barrier-height barrier-depth ] turtles-own [ carrying-food? drop-size ;; how much chemical we're currently dropping ] patches-own [ chemical food nest? nest-scent food-source-number barrier? ] to startup set free-color brown set carrying-color red set nest-xcor 0.7 * min-pxcor set nest-ycor 0 set barrier-width 0.1 * world-width set barrier-height 0.4 * max-pycor set barrier-depth 0.2 * min-pycor end ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Setup Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;; to setup cp ct setup-turtles setup-patches reset-ticks clear-all-plots do-plotting end to setup-turtles set-default-shape turtles "bug" crt ants [ set size 2 ;; easier to see this way rt random-float 360 set color free-color set carrying-food? false setxy nest-xcor nest-ycor ] end to setup-patches ask patches [ set chemical 0 set food 0 set food-source-number -1 set barrier? false setup-nest setup-food setup-barriers update-display ] repeat 100 [diffuse nest-scent diffusion-rate / 100] end to setup-nest ;; patch procedure ;; set nest? variable to true inside the nest ifelse (distancexy nest-xcor nest-ycor) < 5 [ set nest? true set nest-scent 1000 ] [ set nest? false ] end to setup-food ;; patch procedure ;; setup one food source on the right if ((distancexy (0.7 * max-pxcor) 0) < 5) [ set food-source-number 1 ] ;; set "food" at sources to either 1 or 2 if (food-source-number > 0) [ set food (1 + random 2) ] end to setup-barriers ;; patch procedure set barrier? ((abs pxcor) < barrier-width) and (barrier-depth < pycor) and (pycor < barrier-height) ; ifelse ((abs pxcor) < barrier-width) and (barrier-depth < pycor) and (pycor < barrier-height)) end to update-display ;; patch procedure ;; give color to nest and food sources ifelse nest? [ set pcolor violet ] [ ifelse barrier? [ set pcolor grey ] [ ifelse (food > 0) [ if (food-source-number = 1) [ set pcolor cyan ] if (food-source-number = 2) [ set pcolor sky ] if (food-source-number = 3) [ set pcolor blue ] ] [ ifelse display-field = "chemical" [set pcolor scale-color green chemical 0.1 5 ] ;; scale color to show chemical concentration [set pcolor scale-color red (log (nest-scent + 0.1) 10) -1 3 ] ;; scale color to show nest scent ]]] end ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Runtime Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; to go ;; forever button ask turtles [ go-turtles ] diffuse chemical (diffusion-rate / 100) diffuse nest-scent (diffusion-rate / 100) ask patches [ go-patches ] tick do-plotting end to go-turtles ;; turtle procedure if (who < ticks) ;; delay the initial departure of ants [ ifelse carrying-food? [set color carrying-color return-to-nest ] ;; if ant finds food, it returns to the nest [set color free-color look-for-food ] ;; otherwise it keeps looking ; [set color orange return-to-nest ] ;; if ant finds food, it returns to the nest ; [set color brown look-for-food ] ;; otherwise it keeps looking avoid-barrier ] end to go-patches ;; patch procedure set chemical (chemical * (100 - evaporation-rate) / 100) ;;slowly evaporate chemical if barrier? [set chemical 0 set nest-scent 0] ifelse nest? [ set nest-scent 1000 ] [ set nest-scent nest-scent * 0.99 ] if food-source-number > 0 [ set food food + replenish-rate ] update-display ;; Refresh the Display end to return-to-nest ;; turtle procedure ifelse nest? ;; if ant is in the nest, it drops food and heads out again [ set carrying-food? false rt 180 fd 1 ] [ set chemical (chemical + drop-size) ;; drop some chemical, but the amount decreases each time set drop-size (drop-size - 1.5) if drop-size < 1 [set drop-size 1] uphill-nest-scent ;; head toward the greatest value of nest-scent wiggle ;; which is toward the nest fd 1] end to look-for-food ;; turtle procedure if (food > 0) [ set carrying-food? true ;; pick up food set food food - 1 ;; and reduce the food source set drop-size 60 rt 180 stop ;; and turn around ] ifelse (chemical > 2) [ fd 1 ] [ ifelse chemical < 0.05 ;; go in the direction where the chemical smell is strongest [ wiggle fd 1] [ uphill-chemical fd 1] ] end to uphill-chemical ;; turtle procedure wiggle ;; sniff left and right, and go where the strongest smell is let scent-ahead [chemical] of patch-ahead 1 let scent-right chemical-scent 45 let scent-left chemical-scent -45 if (scent-right > scent-ahead) or (scent-left > scent-ahead) [ ifelse scent-right > scent-left [ rt 45 ] [ lt 45 ] ] end to uphill-nest-scent ;; turtle procedure wiggle ;; sniff left and right, and go where the strongest smell is let scent-ahead [nest-scent] of patch-ahead 1 let scent-right get-nest-scent 45 let scent-left get-nest-scent -45 if (scent-right > scent-ahead) or (scent-left > scent-ahead) [ ifelse scent-right > scent-left [ rt 45 ] [ lt 45 ] ] end to wiggle ;; turtle procedure rt random 40 - random 40 if not can-move? 1 [ rt 180 ] end to-report get-nest-scent [ angle ] let p patch-right-and-ahead angle 1 if p = nobody [ report 0 ] report [nest-scent] of p end to-report chemical-scent [ angle ] let p patch-right-and-ahead angle 1 if p = nobody [ report 0 ] report [chemical] of p end to avoid-barrier if (nobody != patch-ahead 1) and ([barrier?] of patch-ahead 1) [right 90 + random 180] forward 1 end to do-plotting if not plot? [ stop ] set-current-plot "Food of each kind" set-current-plot-pen "food-in-pile1" plot count patches with [pcolor = cyan] set-current-plot-pen "food-in-pile2" plot count patches with [pcolor = sky] set-current-plot-pen "food-in-pile3" plot count patches with [pcolor = blue] end to make-barrier if mouse-down? [ask patches [ if ((abs (pxcor - mouse-xcor)) < 2) and ((abs (pycor - mouse-ycor)) < 2) [set pcolor grey set barrier? true]] ] end to remove-barrier if mouse-down? [ask patches [ if ((abs (pxcor - mouse-xcor)) < 2) and ((abs (pycor - mouse-ycor)) < 2) [set pcolor black set barrier? false] update-display ] ] end to deposit-food if mouse-down? [ask patches [ if ((abs (pxcor - mouse-xcor)) < 2) and ((abs (pycor - mouse-ycor)) < 2) [ set food-source-number 1 + position food-kind ["cyan" "sky" "blue"] set food (1 + random 2) ] update-display ] ] end ; Miscellaneous cleanups by B. MacLennan, 2011-12-30. ; ; *** NetLogo 3.1.4 Model Copyright Notice *** ; ; This model was created as part of the project: CONNECTED MATHEMATICS: ; MAKING SENSE OF COMPLEX PHENOMENA THROUGH BUILDING OBJECT-BASED PARALLEL ; MODELS (OBPML). The project gratefully acknowledges the support of the ; National Science Foundation (Applications of Advanced Technologies ; Program) -- grant numbers RED #9552950 and REC #9632612. ; ; Copyright 1998 by Uri Wilensky. All rights reserved. ; ; Permission to use, modify or redistribute this model is hereby granted, ; provided that both of the following requirements are followed: ; a) this copyright notice is included. ; b) this model will not be redistributed for profit without permission ; from Uri Wilensky. ; Contact Uri Wilensky for appropriate licenses for redistribution for ; profit. ; ; This model was converted to NetLogo as part of the projects: ; PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING ; IN CLASSROOMS and/or INTEGRATED SIMULATION AND MODELING ENVIRONMENT. ; The project gratefully acknowledges the support of the ; National Science Foundation (REPP & ROLE programs) -- ; grant numbers REC #9814682 and REC-0126227. ; Converted from StarLogoT to NetLogo, 2001. ; ; To refer to this model in academic publications, please use: ; Wilensky, U. (1998). NetLogo Ants model. ; http://ccl.northwestern.edu/netlogo/models/Ants. ; Center for Connected Learning and Computer-Based Modeling, ; Northwestern University, Evanston, IL. ; ; In other publications, please use: ; Copyright 1998 Uri Wilensky. All rights reserved. ; See http://ccl.northwestern.edu/netlogo/models/Ants ; for terms of use. ; ; *** End of NetLogo 3.1.4 Model Copyright Notice ***