Ants and Termites
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
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 almost 4 years ago by Ronald Paul Ng.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Ants and Termites.png | preview | Preview for 'Ants and Termites' | almost 4 years ago, by Ronald Paul Ng | Download |
This model does not have any ancestors.
This model does not have any descendants.