Ants and Termites

Ants and Termites preview image

1 collaborator

Rng_avatar Ronald Paul Ng (Author)

Tags

ants termite foodm 

Tagged by Ronald Paul Ng about 3 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.0 • Viewed 177 times • Downloaded 10 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?

This project is an extension of the Ants.nlogo by Prof Uri Welenski. In that original Ants.nlogo project, each ant from a colony forages for food at first randomly. Then by following a few rules, the colony of ants seems to be acting in an intelligent way.

The modification this present project makes is in response to seeing this video on Youtube: https://www.youtube.com/watch?v=A1QEGNjDQ7U, which shows columns of ants and termites travelling along two routes, and the edge between the two route are guarded by rows of termites on the edge of the termites route, and ants on the edge of the ants route.

HOW IT WORKS

As in the original Ants.nlogo model, the ants emerges from the nest and move in random direction looking for food. Once it founds the food, it carries it back to the nest, dropping a chemical along the way. The ants will drop chemicalAnt and the termites chemicalTermite. When an ant lands on a square with chemicalAnt, it follows the chemial trail to the food, and as more ants carry food to the nest, the chemical trail will be maintained. Similar mechanism occurs in the case of the termites where they will react to the chemicalTermite.

Note, with time, the chemica will evaporate. The chemical also diffuses outward from the spot where it was first laid down by the ant or the termite.

The additional rule added in this model to the behavior of the ants and by extension to the termites is this. When an ant senses chemicalTermite beyond certain level and at the same time, chemicalAnt at a certain level, which would indicate it is between the two corridors of movements of the ants and termites, it would stop moving. The same applies to the termites. Would that replicate what's seen in the video of Termites and Ants on Youtube as referenced by the link above?

HOW TO USE IT

Click the SETUP button to set up the nests and the food pile(s). THe sliders AntX, AntY, TermiteX and TermiteY allow you to place the nests on any spot on the screen. The choice buttons allow you to choose whether to have 1, 3 or 5 food piles.

The POPULATION slider allows you to set the number of ants/termites. The DIFFUSION-RATE slider allows you to regulate how far the chemicals (chemicalAnt and chemicalTermite) can diffuse, and the EVAPORATION-RATe slider allows you to regulate how fast or slow the chemicals will evaporate and disappear.

THINGS TO NOTICE

At certain settings, you might see the pattern seen in the video being replicated by the model.

THINGS TO TRY

Try changing the distance of the nests from the food pile(s) and see what happens. Try varying the number of ants/termites.

EXTENDING THE MODEL

What if ants and termites would fight each other to the death if they meet up? What if only if an ant or termite is carrying food that will be attacked by the worker ant/termite of the other specie?

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.

RELATED MODELS

ants.nlogo

CREDITS AND REFERENCES

This model is an expansion on the original model by * Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

The original model has one nest only. This model has two species of ants, Termites and ants, with multiple food source.

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 patch
  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 AntX AntY]

  create-termites population / 2
  [ set size 3
    set color red ;; red = not carryiing food
    setxy TermiteX TermiteY]
  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
                ;; should be ifelse rather than if, when pcolor scale-color green chemical 0.1 5 is not blocked
    ifelse nest?
      [ set pcolor violet ]
      [ if food > 0 and foodSource? [ set pcolor cyan ]]
  ]
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 TermiteX TermiteY) < 5 [set nestTermite? true
                              set nest? true]  ;; for Termites
  if (distancexy AntX AntY) < 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 TermiteX TermiteY
  set nest-scent-ant 200 - distancexy AntX AntY
end 

to setup-food  ;; patch procedure

  if numberFoodSource = 1 [foodSource_1]
  if numberFoodSource = 3 [foodSource_3]
  if numberFoodSource = 5 [foodSource_5]

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

to recolor-patch  ;; patch procedure

    ;; scale color to show chemical concentration
  ifelse ticks mod 2 = 1
    [ if foodSource? != true and chemicalAnt > 0.01 [set pcolor scale-color lime chemicalAnt 0.1 5]
      if foodSource? != true and chemicalTermite > 0.01 [set pcolor scale-color magenta chemicalTermite  0.1 5]]
    [ if foodSource? != true and chemicalTermite > 0.01 [set pcolor scale-color magenta chemicalTermite  0.1 5]
      if foodSource? != true and chemicalAnt > 0.01 [set pcolor scale-color lime chemicalAnt  0.1 5 ]]
 ;; give color to nest and food sources
  ifelse nest?
  [ set pcolor violet ]
  [ if food <= 0   ;; should be ifelse rather than if, when pcolor scale-color green chemical 0.1 5 is not blocked
     and foodSource? [ set pcolor 80 ]
  ]
end 

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

to go  ;; forever button
  ask termites
  [ if who mod 2 = 0 [ stop ] ;; delay initial departure
    if nestAnt? [bk 2]
    ifelse color = red
    [ look-for-food-termite  ]       ;; not carrying food? look for it
    [ return-to-nestTermite ]       ;; carrying food? take it back to nest
    wiggle
    if [chemicalAnt] of patch-here > 0.11 [downhill chemicalAnt]
    ifelse ([chemicalTermite] of patch-here > 0.3 and [chemicalTermite] of patch-here < 0.5) or [chemicalAnt] of patch-here > 0.1 [stop]
                                                                                                                              [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 nestTermite? [bk 2]
    ifelse color = green
    [ look-for-food-Ant  ]       ;; not carrying food? look for it
    [ return-to-nestAnt ]       ;; carrying food? take it back to nest
    wiggle
    if [chemicalTermite] of patch-here > 0.11 [downhill chemicalTermite]
    ifelse ([chemicalAnt] of patch-here > 0.3 and [chemicalAnt] of patch-here < 0.5) or [chemicalTermite] of patch-here > 0.1 [stop]
                                                                                                                              [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 

to foodSource_1


  if (distancexy (-0.7 * max-pxcor) (0.0 * max-pycor)) < 10 [set foodSource? true]
end 

to foodSource_3
 ;  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)) < 10 [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]
end 

to foodSource_5
  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)) < 10 [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]
end 






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

Attached files

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

This model does not have any ancestors.

This model does not have any descendants.