Ants and Termites

Ants and Termites preview image

1 collaborator

Rng_avatar Ronald Paul Ng (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.0 • Viewed 19 times • Downloaded 0 times • Run 0 times
Download the 'Ants and Termites' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

In this project, a colony of ants forages for food. Though each ant follows a set of simple rules, the colony as a whole acts in a sophisticated way.

HOW IT WORKS

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 EVAPORATION-RATE slider controls the evaporation rate of the chemical. The DIFFUSION-RATE slider controls the diffusion rate of the chemical.

If you want to change the number of ants, move the POPULATION slider before pressing SETUP.

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 is shown in a plot. The line colors in the plot match the colors of the food piles.

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.

The ants only respond to chemical levels between 0.05 and 2. The lower limit is used so the ants aren't infinitely sensitive. Try removing the upper limit. What happens? Why?

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."

NETLOGO FEATURES

The built-in diffuse primitive lets us diffuse the chemical easily without complicated code.

The primitive patch-right-and-ahead is used to make the ants smell in different directions without actually turning.

HOW TO CITE

If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.

For the model itself:

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

Copyright 1997 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

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.

This model was developed at the MIT Media Lab using CM StarLogo. 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.

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, 1998.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

patches-own [
  chemicalTermite      ;; amount of chemical from termite on this patch
  chemicalAnt          ;; amount of chemical from ant on this match
  food                 ;; amount of food on this patch (0, 1, or 2)
  nest?                ;; if it is a nest, whether it is a Termite or ant nest, it will be true
  nestTermite?         ;; true on termite nest patches, false elsewhere
  nestAnt?             ;; true on ant nest patches, false elsewhere
  nest-scent-termite   ;; number that is higher closer to the termite nest
  nest-scent-ant       ;; number that is higher closer to the ant nest
  foodSource?          ;;
]
breed [ants ant]
breed [termites termite]

;;;;;;;;;;;;;;;;;;;;;;;;
;;; Setup procedures ;;;
;;;;;;;;;;;;;;;;;;;;;;;;

to setup
  clear-all
  set-default-shape turtles "bug"
  create-ants population / 2
  [ set size 2
    set color green ;; green = not carryiing food
    setxy 75 -25]

  create-termites population / 2
  [ set size 4
    set color red ;; red = not carryiing food
    setxy 75 25]
  setup-patches
  reset-ticks
end 

to setup-patches
  ask patches
  [ setup-nest
    setup-food  ;; if the statement is : if distancexy 0 0 [blah blah blah], it is from the point of view of the center 0 0
    recolor-patch ]
end 

to setup-nest  ;; patch procedure
  ;; set nest? variable to true inside the nest, false elsewhere
  set nestTermite? false
  set nestAnt? false
  set nest? false
  set foodSource? false
  if (distancexy 75 25) < 5 [set nestTermite? true
                              set nest? true]  ;; for Termites
  if (distancexy 75 -25) < 5 [set nestAnt? true
                             set nest? true]   ;; for Ants
  ;; spread a nest-scent over the whole world -- stronger near the nest
  set nest-scent-termite 200 - distancexy 75 25
  set nest-scent-ant 200 - distancexy 75 -25
end 

to setup-food  ;; patch procedure

  if (distancexy (-0.6 * max-pxcor) (0.8 * max-pycor)) < 5 [set foodSource? true]
  if (distancexy (-0.6 * max-pxcor) (0.4 * max-pycor)) < 5 [set foodSource? true]
  if (distancexy (-0.6 * max-pxcor) (0.0 * max-pycor)) < 5 [set foodSource? true]
  if (distancexy (-0.6 * max-pxcor) (-0.4 * max-pycor)) < 5 [set foodSource? true]
  if (distancexy (-0.6 * max-pxcor) (-0.8 * max-pycor)) < 5 [set foodSource? true]

  ;; set "food" at sources to either 1 or 2, randomly
  if foodSource? = true
  [ set food one-of [1 2 3 4] ]
end 

to set-foodSource
  let x random 195 - 95
  let y random 195 - 95
  if (distancexy x y ) < 5 [set foodSource? true]
end 

to recolor-patch  ;; patch procedure
  ;; give color to nest and food sources
  ifelse nest?
  [ set pcolor violet ]
  [ ifelse food > 0   ;; should be ifelse rather than if, when pcolor scale-color green chemical 0.1 5 is not blocked
    [ if foodSource? [ set pcolor cyan ]
    ]
    ;; scale color to show chemical concentration

    [if chemicalAnt > 0.01 [set pcolor scale-color lime chemicalAnt 0.1 5]
     if chemicalTermite > 0.01 [set pcolor scale-color magenta chemicalTermite  0.1 5]
    ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;
;;; Go procedures ;;;
;;;;;;;;;;;;;;;;;;;;;

to go  ;; forever button
  ask termites
  [ if who mod 2 = 0 [ stop ] ;; delay initial departure
    if chemicalTermite > 0.2 and chemicalTermite < 0.3 [stop]
    ifelse color = red
    [ look-for-food-termite  ]       ;; not carrying food? look for it
    [ return-to-nestTermite ]       ;; carrying food? take it back to nest
    wiggle
    fd 1 ]
  diffuse chemicalTermite (diffusion-rate / 100)
  ask patches
  [ set chemicalTermite chemicalTermite * (100 - evaporation-rate) / 100  ;; slowly evaporate chemical
    recolor-patch ]

   ask ants
  [ if who mod 2 = 1 [ stop ] ;; delay initial departure
    if chemicalAnt > 0.2 and chemicalAnt < 0.3 [stop]
    ifelse color = green
    [ look-for-food-Ant  ]       ;; not carrying food? look for it
    [ return-to-nestAnt ]       ;; carrying food? take it back to nest
    wiggle
    fd 1 ]
  diffuse chemicalAnt (diffusion-rate / 100)
  ask patches
  [ set chemicalAnt chemicalAnt * (100 - evaporation-rate) / 100  ;; slowly evaporate chemical
    recolor-patch ]
  tick
end 

to return-to-nestTermite  ;; turtle procedure
  ifelse nest?
  [ ;; drop food and head out again
    set color red
    rt 180 ]
  [ set chemicalTermite chemicalTermite + 60  ;; drop some chemical
    uphill-nest-scentTermite ]         ;; head toward the greatest value of nest-scent
end 

to return-to-nestAnt  ;; turtle procedure
  ifelse nest?
  [ ;; drop food and head out again
    set color green
    rt 180 ]
  [ set chemicalAnt chemicalAnt + 60  ;; drop some chemical
    uphill-nest-scentAnt ]         ;; head toward the greatest value of nest-scent
end 

to look-for-food-termite  ;; termite procedure
  if food > 0
  [ set color orange + 1     ;; pick up food
    set food food - 1        ;; and reduce the food source
    rt 180                   ;; and turn around
    stop ]
  ;; go in the direction where the chemical smell is strongest
  if (chemicalTermite >= 0.05) and (chemicalTermite < 2)
  [ uphill-chemicalTermite ]
end 

to look-for-food-ant  ;; ant procedure
   if food > 0
  [ set color blue + 1     ;; pick up food
    set food food - 1        ;; and reduce the food source
    rt 180                   ;; and turn around
    stop ]
  ;; go in the direction where the chemical smell is strongest
  if (chemicalAnt >= 0.05) and (chemicalAnt < 2)
  [ uphill-chemicalAnt ]
end 

;; sniff left and right, and go where the strongest smell is

to uphill-chemicalTermite  ;; Termite procedure
  let scent-ahead chemical-scentTermite-at-angle   0
  let scent-right chemical-scentTermite-at-angle  45
  let scent-left  chemical-scentTermite-at-angle -45
  if (scent-right > scent-ahead) or (scent-left > scent-ahead)
  [ ifelse scent-right > scent-left
    [ rt 45 ]
    [ lt 45 ] ]
end 

;; sniff left and right, and go where the strongest smell is

to uphill-chemicalAnt  ;; Termite procedure
  let scent-ahead chemical-scentAnt-at-angle   0
  let scent-right chemical-scentAnt-at-angle  45
  let scent-left  chemical-scentAnt-at-angle -45
  if (scent-right > scent-ahead) or (scent-left > scent-ahead)
  [ ifelse scent-right > scent-left
    [ rt 45 ]
    [ lt 45 ] ]
end 

;; sniff left and right, and go where the strongest smell is for termite

to uphill-nest-scentTermite  ;; turtle procedure
  let scent-ahead nest-scentTermite-at-angle   0
  let scent-right nest-scentTermite-at-angle  45
  let scent-left  nest-scentTermite-at-angle -45
  if (scent-right > scent-ahead) or (scent-left > scent-ahead)
  [ ifelse scent-right > scent-left
    [ rt 45 ]
    [ lt 45 ] ]
end 

;; sniff left and right, and go where the strongest smell is for ant

to uphill-nest-scentAnt  ;; turtle procedure
  let scent-ahead nest-scentAnt-at-angle   0
  let scent-right nest-scentAnt-at-angle  45
  let scent-left  nest-scentAnt-at-angle -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
  lt random 40
  if not can-move? 1 [ rt 180 ]
end 

to-report nest-scentTermite-at-angle [angle]
  let p patch-right-and-ahead angle 1
  if p = nobody [ report 0 ]
  report [nest-scent-termite] of p
end 

to-report nest-scentAnt-at-angle [angle]
  let p patch-right-and-ahead angle 1
  if p = nobody [ report 0 ]
  report [nest-scent-Ant] of p
end 

to-report chemical-scentTermite-at-angle [angle]
  let p patch-right-and-ahead angle 1
  if p = nobody [ report 0 ]
  report [chemicalTermite] of p
end 

to-report chemical-scentAnt-at-angle [angle]
  let p patch-right-and-ahead angle 1
  if p = nobody [ report 0 ]
  report [chemicalAnt] of p
end 


; Copyright 1997 Uri Wilensky.
; See Info tab for full copyright and license.

There is only one version of this model, created about 1 month ago by Ronald Paul Ng.

Attached files

File Type Description Last updated
Ants and Termites.png preview Preview for 'Ants and Termites' about 1 month ago, by Ronald Paul Ng Download

This model does not have any ancestors.

This model does not have any descendants.