CS 420/527 — Biologically Inspired Computation
NetLogo Simulation

Demonstration of Ant Foraging


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

WHAT IS IT?

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.

HOW TO USE IT

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.

THINGS TO NOTICE

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?

EXTENDING THE MODEL

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.

NETLOGO FEATURES

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.

CREDITS AND REFERENCES

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.

PROCEDURES

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 ***

Return to COSC 420/527 home page

Return to MacLennan's home page

Send mail to Bruce MacLennan / MacLennan@utk.edu

Valid HTML 4.01!This page is web.eecs.utk.edu/~mclennan/Classes/420/NetLogo/Ant-Foraging.html
Last updated: 2012-01-03.