Bacterial competition with toxin producer
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
## WHAT IS IT?
A spatial model of competition between two bacterial species (green and red), with green cells producing a toxin that kills red cells.
## Color Coding
Color Coding:
Turtles: Magenta- normal toxin molecule that can diffuse and attach to red cells
Blue- toxin molecule that has attached to (red) cell and can no longer move
Patches: Shades of Green and Red- bacterial cells, lighter shades represent more cells at a location
Yellow- unoccupied patch; Brown- unoccupied after previously being occupied (shows clearing of red cells by toxin)
## HOW BACTERIA WORK
Each patch begins with some allocation of nutrient and can be occupied by up to 3 cells. Reproduction occurs at a specified rate, which depends on cell type, as long as the cell has acquired sufficient energy by consuming nutrient. A unit of nutrient that is consumed confers a specified amount of energy. Each reproduction event costs the reproducing cell energy. A cell that does not have sufficient energy to reproduce will attempt to consume nutrient from its `nutrient neighborhood' (patches that are within a Moore neighborhood with radius three). This is an efficient method for simulating the effects of nutrient diffusion without excessive computational cost. The offspring cell is placed at the patch of the parent or at one of the 8 neighboring patches, with pre-specified probabilities, as long as there is space available and the other species is not present at that patch. Reproduction is suppressed whenever all these local patches are at their carrying capacity. A red cell that is killed by toxin releases a specified amount of nutrient to that patch.
## HOW TOXINS WORK
Toxin molecules (turtles) are produced by green cells at each tick, as long as they have sufficient energy. Toxin molecules diffuse and can attach to red cells. Toxins kill red cells if enough attach; they do not attach to or harm green cells. A toxin molecule will degrade after a specified time.
## THINGS TO TRY
(suggested things for the user to try to do (move sliders, switches, etc.) with the model)
## EXTENDING THE MODEL
(suggested things to add or change in the Code tab to make the model more complicated, detailed, accurate, etc.)
## NETLOGO FEATURES
(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)
## RELATED MODELS
(models in the NetLogo Models Library and elsewhere which are of related interest)
## CREDITS AND REFERENCES
(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)
Comments and Questions
globals [red-nearby green-nearby red-toxin-area green-toxin-area toxin-area setup-size target feeding-radius radius nearby ] breed [toxins toxin] ;; creates a breed of turtles called "toxins" pluaral and "toxin" singular toxins-own [age] ;; toxin specific variable used to calculate how old the molecule is patches-own [ cells energy dormant time nutrient] ; variables for the patches ; Color Coding: ;toxins: Magenta- normal toxin that can move and attach ; Blue- toxins that have attached to cell and can no longer move ;Patches: Shades of Green and Red- normal bacterial cells, lighter shades represent more cells at a location, ; Yellow- Unoccupied patch, Brown- unoccupied after previously being occupied (shows clearing of red cells by toxin) ; ; ; ; to setup clear-all reset-ticks set red-nearby circle-neighborhood red-radius set green-nearby circle-neighborhood green-radius set setup-size circle-neighborhood colony-initial-size set feeding-radius circle-neighborhood 3 if mode = "1 colony" ; 1 colony mode sets up a single green colony in the middle [ ask patches [set pcolor 48] ask patch (0) (0) [ ask patches at-points setup-size [ set pcolor 57 set energy 0 set cells 3 ] ] ] if mode = "random positions" ; this mode spreads a specified number of green and red cells across the grid [ ask patches [ set pcolor 48 set cells 0 set nutrient nutrient-amount ] while [count patches with [pcolor = 55] < number-of-green] [ask patch random-xcor random-ycor [ if pcolor = 48 [ set pcolor 55 set cells 1 set nutrient nutrient-amount ] ] ] while [count patches with [pcolor = 15] < number-of-red] [ask patch random-xcor random-ycor [ if pcolor = 48 [ set pcolor 15 set cells 1 set nutrient nutrient-amount] ] ] ] if mode = "2 colonies" ; this mode makes a green colony and a red colony a specific distance apart [ ask patches [set pcolor 48] ask patch ((distance-apart / 2)) (0) [ ask patches at-points setup-size [ set pcolor 57 set energy 0 set cells 3 ] ] ask patch ((distance-apart / -2)) (0) [ ask patches at-points setup-size [ set pcolor 17 set energy 0 set cells 3 ] ] ] end to go if growth? [ ask patches with [ (pcolor = 55) or (pcolor = 56) or (pcolor = 57)] [ eating-green grow-green if toxin? [ make-toxin] set time time + 1 ] ask patches with [(pcolor = 15) or (pcolor = 16) or (pcolor = 17)] [ eating-red grow-red set time time + 1 ] ] ask turtles ;; asks the turtles to run their commands [ if mode = "2 colonies" ;; this command delays the phage from doing anything until after 200 ticks. This give the bacteria time to grow first [ if ticks = 200 [ if color = orange [ set color blue ] ] ] ] ask toxins ; asks the toxins to run their commands [ toxin-move toxin-attach grow-up ] ifelse show-toxin? ; this will show all the toxins if the switch is turned on [ ask toxins [ show-turtle ] ] [ ask toxins [ hide-turtle ] ] tick end to grow-green ;; if a cell has energy it can grow, cells with more open spaces near them ( yellow patches) will have a higher chance of reproducing. ;; probability is (number of yellow in von-neuman neighborhood / total number of patches in vonneumann neigbborhood) * 90% + 10% ;; added a 10% base probability to all cells to make colonies more symmetrical ;; the grow command works by asking a patch if its energy is less than 1. It is it will "roll a dice" with a higher chance of success based on the number of yellow patches nearby. ;;If the roll is succesfull the patch will ask itself if it has less than the maximum number of patches (2) if it does it will roll another dice. If that number is less than 5 it will place ;; the new cell on itself and increase the number of cells on that patch. If the roll is greater than 5 it will put the newly formed cell in a neighboring patch. ;; the cell will ask one-of neighbors with cells < 3 (if it can't find a cell with cells < 3 it will return "nobody" and stop the reproduction event) after finding a cell with cells < 3 that's the right color ;; it will add a new cell to that location and change cells number and color accordingly. if time > reproduction-time-green ;; this is how you change the growth rate !!!!! start with competitor being faster [ if energy >= reproduction-energy-green [ ifelse cells < 3 [ ifelse add-to-parent-site > random 100 [ set cells cells + 1 set energy energy - 1 if cells = 2 [ set pcolor 56 ] if cells = 3 [ set pcolor 57 ] ] [ set target one-of neighbors with [cells < 3] if target != nobody [ ask target [ if ( pcolor = 55) or ( pcolor = 56) or ( pcolor = 57) or ( pcolor = black) or ( pcolor = 48) or (pcolor = brown) [ if cells = 0 [ set energy 0 set cells 1 set pcolor green set time 0 ask myself [set energy energy - 1] stop ] if cells = 1 [ set cells cells + 1 set pcolor 56 ask myself [set energy energy - 1] stop ] if cells = 2 [ set cells cells + 1 set pcolor 57 ask myself [set energy energy - 1] stop ] ] ] ] ] ] [ set target one-of neighbors with [cells < 3] if target != nobody [ ask target [ if (pcolor = 55) or (pcolor = 56) or (pcolor = 57) or (pcolor = black) or (pcolor = 48) or (pcolor = brown) [ if cells = 0 [ set energy 0 set cells 1 set time 0 set pcolor green ask myself [set energy energy - 1] stop ] if cells = 1 [ set cells cells + 1 set pcolor 56 ask myself [set energy energy - 1]] stop if cells = 2 [ set cells cells + 1 set pcolor 57 ask myself [set energy energy - 1] stop ] ] ] ] ] set time 0 ] ] end to grow-red ;; same as green command but with colors switched if time > reproduction-time-red [ if energy >= reproduction-energy-red [ ifelse cells < 3 [ ifelse add-to-parent-site > random 100 [ set cells cells + 1 set energy energy - 1 if cells = 2 [ set pcolor 16 ] if cells = 3 [ set pcolor 17 ] ] [ set target one-of neighbors with [cells < 3] if target != nobody [ ask target [ if ( pcolor = 15) or ( pcolor = 16) or ( pcolor = 17) or ( pcolor = black) or ( pcolor = 48) or (pcolor = brown) [ if cells = 0 [ set energy 0 set cells 1 set pcolor red set time 0 ask myself [set energy energy - 1] stop ] if cells = 1 [ set cells cells + 1 set pcolor 16 ask myself [set energy energy - 1] stop ] if cells = 2 [ set cells cells + 1 set pcolor 17 ask myself [set energy energy - 1] stop ] ] ] ] ] ] [ set target one-of neighbors with [cells < 3] if target != nobody [ ask target [ if (pcolor = 15) or (pcolor = 16) or (pcolor = 17) or (pcolor = black) or (pcolor = 48) or (pcolor = brown) [ if cells = 0 [ set energy 0 set cells 1 set time 0 set pcolor red ask myself [set energy energy - 1] stop ] if cells = 1 [ set cells cells + 1 set pcolor 16 ask myself [set energy energy - 1]] stop if cells = 2 [ set cells cells + 1 set pcolor 17 ask myself [set energy energy - 1] stop ] ] ] ] ] set time 0 ] ] end ;; this is the reporter used to take a radius number (n) and create a list of all the cells in the neighborhood of the radius n and can store the list as a variable (ex. "red-nearby") to-report circle-neighborhood [n] let result [list pxcor pycor] of patches with [(abs pxcor) ^ 2 + (abs pycor) ^ 2 <= n ^ 2] report result end to eating-green ;;a cell can eat at any site with nutrient and it will consume a set amount of energy. ;; this command works by looking for a patch to eat in a set radius. ;;based on the neighborhood used by the bacteria (ex: red-nearby). As soon as the patch finds a suitable patch to eat it will move on. if energy < green-hunger [ ask one-of patches at-points feeding-radius [ if nutrient > 0 [ set nutrient nutrient - 1 ask myself [ set energy energy + 1 ] ] ] ] end to eating-red ;; this is the same as eating-green but works for the red bacteria if energy < red-hunger [ ask one-of patches at-points feeding-radius [ if nutrient > 0 [ set nutrient nutrient - 1 ask myself [ set energy energy + 1 ] ] ] ] end to make-toxin ;; a command for a patch to create and release toxin particles if energy > 0 [ sprout-toxins toxin-production [ set color magenta set size .5 set age 0 ] ] end to toxin-move ; command to let the toxins move, only magenta toxins can move if color = magenta [ right random 360 forward toxin-speed ] end to toxin-attach ; toxin can attach and turn pink, once the number of toxin attached is equal to the lethal-amount the cell dies and clears all attached toxin molecules if (pcolor = 15) or (pcolor = 16) or (pcolor = 17) [ if random 100 < probability-of-toxin-attachment [ set color blue ask patch-here [ if count toxins-here with [color = blue] = lethal-amount [ set pcolor pcolor - 1 set cells cells - 1 set nutrient nutrient + corpse-energy if cells = 0 [ set pcolor brown ] ask toxins-here [ if color = blue [ die ] ] ] ] ] ] end to grow-up ; toxins grow older each tick once they reach degradation-time they die ifelse age = degradation-time [ die ] [ set age age + 1 ] end
There is only one version of this model, created almost 10 years ago by Cameron Crandall.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.