patches-own [ toxin ] breed [ bacterias bacteria ] breed [ autoinducers autoinducer ] breed [ antiquorums antiquorum ] autoinducers-own [ age ] antiquorums-own [ age ] to startup ; automatically runs the setup procedure when the model is opened setup end ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Setup Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;; to setup ; a way to connect us to the setup button on the interface ca ; clears plots, and the graphics window set-default-shape bacterias "circle 2" ; sets the shape of the bacterias agent set to a circle create-bacterias initial-population ; uses the slider 'initial-population' to set the population [ setxy random-xcor random-ycor ; sets the x and y coordinates for the bacteria agent set to random values set color yellow ; sets the color of the bacteria agent set to yellow set size 2 ; sets the size of the bacteria agent set to 2 ] set-default-shape autoinducers "dot" ; sets the shape of the autoinducer agent set to a dot ask patches ; a way to talk to patches [ set toxin 0 ] ; because the above line is addressing the patches, this lower line is now setting all the values ; of 'toxin' ( a variable assigned in the very first line of code in the model ) to zero reset-ticks ; sets the value of the ticks to 0 end to go ; a way to connect us to the go button on the interface ask autoinducers ; a way to talk to the autoinducer agent set [ auto_decay ] ; calling for the auto_decay procedure which is further below ask antiquorums ; a way to talk to the antiquroum agent set [ anti_decay ] ; calling for the anti_decay procedure carrying-capactity ; the following lines are calling different procedures each time the model is iterated move-bacteria ; move-autoinducer ; move-antiquorum ; cell-division-bacteria ; synthesize ; change-behavior ; osmose ; receptor-anti ; feedback ; inject-antiquorum ; halfway ; ; sets the condition that IF there are more patches with a slightly pink color than there are of a number ; composed of the highest y-value in the graphics window ( measurement from the origin to the top of the graphics window ) ; multiplied by the highest x-value in the graphics window ( measurement from the origin to the far right of the graphics window ) ; multiplied by 4 ( this was done in order to try and enumerate all of the patches in the graphics window. ; The default setting for the graphics window of this model is set to divide it up into 4 separate, equal parts following a coordinate system. ; By multiplying the height and width of one of the squares ( the positive one oriented in the upper right ) by 4, all patches are accounted for if count patches with [pcolor > 131] > max-pycor * max-pxcor * 4 [print "The Bacteria Won!"] ; prints "The Bacteria Won!" to the command center window if count patches with [pcolor > 131] > max-pycor * max-pxcor * 4 [stop] ; stops the go procedure wait .01 ; slows down the time between each tick tick ; counts one tick end ; the following 'to' statements will always be calling procedures to auto_decay ; calls auto_decay procedure which is functionally the same as the anti_decay procedure set age age + random-float 2 ; adds a number between 0 and almost 2 to the current value of the age variable if age > 20 ; a conditional statement that says if the value of age is more than 20 [ die ] ; the agent dies end to anti_decay set age age + random-float 1 if age > 200 [ die ] end to move-bacteria ask bacterias ; a way to talk to bacteria agents [ move ] ; a procedure called move 'nested' inside of a procudure called move-bacteria ( much like the above go procedure ) end to move-autoinducer ; same as the above procedure ask autoinducers [ move ] end to cell-division-bacteria ask bacterias [ if random-float 100 > 99.5 ; a conditional statement that says if a random number between 0 and almost 100 is greater than 99.5 [ hatch 1 ] ; then a bacteria will create another bacteria ] end to synthesize ask bacterias [ if random-float 100 < 1 ; a conditional statement that says if a random number between 0 and almost 100 is less than 1 [ hatch-autoinducers 2 ; then a bacteria will create two autoinducer agents [ set color blue ; these new autoinducer agents will have the color blue set size 1 ; a size of 1 jump 3 ] ; and move three small steps away from where they hatch ; the jump command was used to keep autoinducers away from the bacteria that created them ; in an attempt to keep bacteria from interacting with autoinducers they themselves created ; in actuality there is some interaction between bacteria and their own autoinducers ] ] end to change-behavior ask bacterias [ let sense-auto count autoinducers in-radius 1 ; creates a local variable that holds the value of how many autoinducers are in a small radius let sense-anti count antiquorums in-radius 1 ; creates a local variable that holds the value of how many antiquorum are in a small radius ; a conditional statement that says if the value of the local variable that ; counts the amount of autoinducers is more than some random value between 0 and almost 25 ; in addition to the amount of antiquorums around the bacteria ; then the following actions will occur : ; then the amount of toxin that is on the patch that the bacteria is on ; will be added to by 2 ; the bacteria will change color ( to magenta ) ; if none of the conditions are met ifelse sense-auto > (random-float 25 + sense-anti) [ set toxin toxin + 3 ; then the amount of toxin that is on the patch that the bacteria is on will be added to by 2 set color magenta ] ; the bacteria will change color ( to magenta ) [ set color yellow ] ; if none of the conditions are met the bacteria turns yellow ] diffuse toxin 1 ; releases a bit of the amount of toxin on a patch to the surrounding patches ask patches [ set toxin toxin * 0.97 ; takes the current value of toxin and degrades set pcolor scale-color pink toxin 0.1 3 ] ; makes a gradient out of the color pink based on the value of the toxin end to osmose ask autoinducers [ let metabolizing-bacteria min-one-of other bacterias ; creates a local variable that takes on the value of a bacteria that in-radius 1 [ distance myself ] ; is the closest to each autoinducer in a small distance from itself ifelse metabolizing-bacteria = nobody ; if there are not bacteria the fulfill this requirement [ fd .1 ] ; the autoinducer moves forward [ face metabolizing-bacteria fd .3 ] ; if there is a bacteria around the autoinducer faces it and moves toward it ] end to carrying-capactity ;;;; Copyright 1997 Uri Wilensky. See Model: Simple Birth Rates let num-bacteria count bacterias ; creates a local variable that holds the value of how many bacteria agents there are if num-bacteria <= carrying-capacity ; a conditional statement that says if the total number of bacteria agents is less than ; or equal to the value set by the carrying-capacity slider in the interface [ stop ] ; then this procedure ( and only this procedure ) will stop ; the line of code below uses a local variable that holds the value of the total number of bacteria ; subtracted by the value of set by the carrying-capacity slider ; divided by the total number of bacteria ; the idea of a limit on population is drawn from the logistics function ; which considers the growth of a population over time to be determined ; some environmental constraint ( some necessary resource for reproduction ) ; ( for more information see ; https://www.math.duke.edu//education/ccp/materials/diffeq/logistic/logi1.html ) ; the carrying-capacity procedure is not attempting to show logistic growth ; this procedure's function is place a limit on how big the population can get ; a condition that implies some shared environment of all the agents let chance-to-die ( num-bacteria - carrying-capacity ) / num-bacteria ask bacterias ; a conditional statement that says if a random number ( between 0 and almost 1 ) ; is less than the above local variable then [ if random-float 1 < chance-to-die [ ask autoinducers in-radius .5 ; then autoinducers near a bacteria [ die ] ; will die die ] ; along with that particular bacteria ] end to feedback if reinforcing-feedback = true ; checks to see if the reinforcing-feedback switch is on or not, if it is ; the below conditional statement is put into action [ ask bacterias [ let see count autoinducers in-radius .5 ; a local variable that holds the value of the number of autoinducers really close to the bacteria agents ; a conditional statement that says if the number of autoinducers close to the bacteria is greater than 3 if see > 3 [ hatch-autoinducers 1 ; then an autoinducer is created [ set color blue ; with a color set to blue set size 1 ; and with a size of 1 jump 3 ] ; which move three steps away from the bacteria that created them ] ] ] end to inject-antiquorum if mouse-down? = true ; checks to see if the mouse button is being clicked over the graphics window ( not just anywhere on the interface ) [ create-antiquorums 50 ; creates 50 antiquorums [ set color green ; with a color set to green set size 1 ; with a size set to 1 set shape "dot" ; and a shape set to a dot setxy mouse-xcor mouse-ycor ] ; the coordinates of the mouse cursor are used to place these agents in the graphics window ] end to move-antiquorum ask antiquorums [ move ] end to receptor-anti ; see comments on 'to osmose' above ask antiquorums [ let metabolizing-bacteria min-one-of other bacterias in-radius 1 [ distance myself ] ifelse metabolizing-bacteria = nobody [ fd .1 ] [ face metabolizing-bacteria fd .3 ] ] end to move ; this procedure attempts to keep the bacteria away from the edges of the graphics window ; to see what happens to the agents without this procedure, comment out code ifelse patch-ahead 3 = patch max-pxcor pycor ; a conditional statement that asks the bacteria to look ahead 3 patches or patch-ahead 3 = patch min-pxcor pycor ; if the bacteria see a patch that has the value of any of the patches on the boarder or patch-ahead 3 = patch pxcor max-pycor ; of the graphics window or patch-ahead 3 = patch pxcor min-pycor or patch-here = patch max-pxcor pycor ; or if any of the bacteria are currently on a patch with those same values or patch-here = patch min-pxcor pycor or patch-here = patch pxcor max-pycor or patch-here = patch pxcor min-pycor [ facexy 0 0 ; they face the origin jump 1 ] ; and move forward 1 ; if the conditional statement is not met ; then the direction that they face determined by [ rt random-float 30 - random-float 30 ; a right turn that is calculated by taking a random degree between 0 and almost 30 and subtracting ; another random degree between 0 and almost 30 fd .3 ] ; the bacteria then move forward along that heading end to halfway ; a conditional statement that very similar to the logic toward the end of the go procedure ; the only different being that instead of enumerating all patches this statement asks for only half ; and ; that this halfway point is constrained by another conditional that is only slightly ( .1 ) greater than half if count patches with [pcolor > 131] > max-pycor * max-pxcor * 2 and count patches with [pcolor > 131] < max-pycor * max-pxcor * 2.1 [ print "Click the World to release antiquorum!" ] ; prints "Click the World to release antiquorum!" end @#$#@#$#@ GRAPHICS-WINDOW 235 10 655 451 20 20 10.0 1 10 1 1 1 0 0 0 1 -20 20 -20 20 0 0 1 ticks 30.0 SLIDER 24 154 196 187 initial-population initial-population 1 200 1 1 1 NIL HORIZONTAL BUTTON 25 56 91 89 NIL setup NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 114 57 180 90 NIL go T 1 T OBSERVER NIL NIL NIL NIL 1 SLIDER 22 267 194 300 carrying-capacity carrying-capacity 0 200 100 1 1 NIL HORIZONTAL SWITCH 21 387 195 420 reinforcing-feedback reinforcing-feedback 0 1 -1000 PLOT 854 10 1238 223 populations ticks amount 0.0 1000.0 0.0 1000.0 true true "" "" PENS "bacterias" 1.0 2 -1184463 true "" "plot count bacterias" "autoinducers" 1.0 0 -14454117 true "" "plot count autoinducers" "toxin" 1.0 0 -2064490 true "" "plot count patches with [pcolor > 131]" "antiquorum" 1.0 0 -13840069 true "" "plot count antiquorums" "carrying capacity" 1.0 0 -16777216 true "" "plot carrying-capacity" "critical health" 1.0 0 -7713188 true "" "plot max-pycor * max-pxcor * 4" TEXTBOX 29 10 165 42 Self-Organization: Quorum Sensing 13 0.0 1 PLOT 822 229 982 456 Health of Organism NIL NIL 0.0 1.0 0.0 0.0 false false "set-histogram-num-bars 1\nset-plot-y-range 400 count patches" "" PENS "health" 1.0 1 -2674135 true "" "histogram [ toxin ] of patches" TEXTBOX 661 434 676 452 ^^^^ 8 131.0 1 TEXTBOX 661 434 676 452 ^^^^ 8 131.0 1 TEXTBOX 661 431 676 449 %%%% 8 131.0 1 TEXTBOX 661 425 676 443 %%%% 8 131.0 1 TEXTBOX 661 428 676 446 %%%% 8 131.0 1 TEXTBOX 661 422 676 440 %%%% 8 131.0 1 TEXTBOX 661 416 676 434 %%%% 8 131.0 1 TEXTBOX 661 419 676 437 %%%% 8 131.0 1 TEXTBOX 661 413 676 431 %%%% 8 132.0 1 TEXTBOX 661 410 676 428 %%%% 8 132.0 1 TEXTBOX 661 407 676 425 %%%% 8 132.0 1 TEXTBOX 661 404 676 422 %%%% 8 132.0 1 TEXTBOX 661 401 676 419 %%%% 8 132.0 1 TEXTBOX 661 398 676 416 %%%% 8 132.0 1 TEXTBOX 661 395 676 413 %%%% 8 132.0 1 TEXTBOX 661 392 676 413 %%%% 8 133.0 1 TEXTBOX 661 389 676 413 %%%% 8 133.0 1 TEXTBOX 661 386 676 413 %%%% 8 133.0 1 TEXTBOX 661 383 676 413 %%%% 8 133.0 1 TEXTBOX 661 380 676 413 %%%% 8 133.0 1 TEXTBOX 661 377 676 413 %%%% 8 133.0 1 TEXTBOX 661 374 676 413 %%%% 8 133.0 1 TEXTBOX 661 371 676 413 %%%% 8 134.0 1 TEXTBOX 661 368 676 413 %%%% 8 134.0 1 TEXTBOX 661 365 676 413 %%%% 8 134.0 1 TEXTBOX 661 362 676 413 %%%% 8 134.0 1 TEXTBOX 661 359 676 413 %%%% 8 134.0 1 TEXTBOX 661 356 676 413 %%%% 8 134.0 1 TEXTBOX 661 353 676 413 %%%% 8 134.0 1 TEXTBOX 661 350 676 413 %%%% 8 135.0 1 TEXTBOX 661 347 676 413 %%%% 8 135.0 1 TEXTBOX 661 344 676 413 %%%% 8 135.0 1 TEXTBOX 661 341 676 413 %%%% 8 135.0 1 TEXTBOX 661 338 676 413 %%%% 8 135.0 1 TEXTBOX 661 335 676 413 %%%% 8 135.0 1 TEXTBOX 661 332 676 413 %%%% 8 135.0 1 TEXTBOX 661 329 676 413 %%%% 8 136.0 1 TEXTBOX 661 326 676 413 %%%% 8 136.0 1 TEXTBOX 661 323 676 413 %%%% 8 136.0 1 TEXTBOX 661 320 676 413 %%%% 8 136.0 1 TEXTBOX 661 317 676 413 %%%% 8 136.0 1 TEXTBOX 661 314 676 413 %%%% 8 136.0 1 TEXTBOX 661 311 676 413 %%%% 8 136.0 1 TEXTBOX 661 308 676 413 %%%% 8 137.0 1 TEXTBOX 661 305 676 413 %%%% 8 137.0 1 TEXTBOX 661 302 676 413 %%%% 8 137.0 1 TEXTBOX 661 299 676 413 %%%% 8 137.0 1 TEXTBOX 661 296 676 413 %%%% 8 137.0 1 TEXTBOX 661 293 676 413 %%%% 8 137.0 1 TEXTBOX 661 290 676 413 %%%% 8 137.0 1 TEXTBOX 661 287 676 413 %%%% 8 138.0 1 TEXTBOX 661 284 676 413 %%%% 8 138.0 1 TEXTBOX 661 281 676 413 %%%% 8 138.0 1 TEXTBOX 661 278 676 413 %%%% 8 138.0 1 TEXTBOX 661 275 676 413 %%%% 8 138.0 1 TEXTBOX 661 272 676 413 %%%% 8 138.0 1 TEXTBOX 661 269 676 413 %%%% 8 138.0 1 TEXTBOX 661 266 676 413 %%%% 8 139.0 1 TEXTBOX 661 263 676 413 %%%% 8 139.0 1 TEXTBOX 661 260 676 413 %%%% 8 139.0 1 TEXTBOX 661 257 676 413 %%%% 8 139.0 1 TEXTBOX 661 254 676 413 %%%% 8 139.0 1 TEXTBOX 661 251 676 413 %%%% 8 139.0 1 TEXTBOX 661 248 676 413 %%%% 8 139.9 1 TEXTBOX 661 245 676 413 %%%% 8 139.9 1 TEXTBOX 661 242 676 413 %%%% 8 139.9 1 TEXTBOX 661 239 676 413 %%%% 8 139.9 1 TEXTBOX 661 236 676 413 %%%% 8 139.9 1 TEXTBOX 661 233 676 413 %%%% 8 139.9 1 TEXTBOX 661 230 676 413 xxxx 8 139.9 1 TEXTBOX 678 435 828 453 LOW 12 0.0 1 TEXTBOX 677 344 827 362 MEDIUM 12 0.0 1 TEXTBOX 676 256 826 274 HIGH 12 0.0 1 TEXTBOX 822 227 855 457 NIL 10 0.0 0 TEXTBOX 659 227 867 259 Toxin Concentration Index 13 0.0 1 TEXTBOX 274 455 625 473 Click the World to fight off bacteria with antiquorum* 13 0.0 1 TEXTBOX 24 338 174 380 On: Bacteria make more autoinducers when they 'sense' them 11 0.0 1 TEXTBOX 22 427 202 483 Off: Bacteria do not make any more autoinducers than normal no matter how many they 'sense' 11 0.0 1 TEXTBOX 275 456 425 474 Click the World 13 0.0 1 TEXTBOX 23 219 203 275 Greatest number of bacteria that can live sustainably in the virtual environment 11 0.0 1 TEXTBOX 25 108 194 150 How many bacteria populate the world before the model starts 11 0.0 1 TEXTBOX 277 477 566 519 *little green dots that block bacteria from seeing autoinducers 11 0.0 1 TEXTBOX 978 230 1044 455 \nEXCELLENT\n\n\n\n\n\n\n\n\n\n\n\n\nDEATH 11 0.0 0 TEXTBOX 660 37 810 68 O 25 45.0 1 TEXTBOX 683 45 864 73 bacteria not producing toxins 11 0.0 1 TEXTBOX 661 19 811 37 What are those things? 11 0.0 1 TEXTBOX 660 63 810 94 O 25 125.0 1 TEXTBOX 684 73 834 91 bacteria producing toxins 11 0.0 1 TEXTBOX 666 96 816 121 • 20 105.0 1 TEXTBOX 685 102 835 120 autoinducer 11 0.0 1 TEXTBOX 666 118 816 143 • 20 55.0 1 TEXTBOX 685 125 835 143 antiquorum 11 0.0 1 TEXTBOX 366 471 516 496 • 20 55.0 1 @#$#@#$#@ ## WHAT IS IT? Emergent Behavior in Quorums Sensing model introduces the concept of emergence and reinforcing feedback by using as an example: how bacteria talk and work together to overwhelm something (or someone) they have infected. You’ll be able to make it difficult for bacteria to work collectively by blocking how they communicate individually, hopefully before what they have infected gets too sick. ## HOW IT WORKS The world is populated with a set number of bacteria that randomly wander around both reproducing and creating autoinducers. Each bacteria has a random chance of dying, and creating new bacteria. The total bacteria population is controlled by a ‘slider’ that sets a carrying capacity in the model. Autoinducers bounce around randomly in the model as well, and have a random chance of dying. When an autoinducer and a bacteria meet, the autoinducer nests inside the bacteria. Once a bacteria has a certain number of autoinducers inside of it, the bacteria changes color (yellow to magenta) and begins to change the color of the patchers surrounding it, simulating the diffusion of a generic chemical. This chemical dissipates at a set rate specified by the model. The concentration of this chemical is shown with color and brightness illustrated in the right margin. A plot graphically shows the change in population of bacteria and autoinducers over time, as well as the amount of patches that have some chemical on them. In the plot there are two flat lines, running horizontal. The lower one indicates where the carrying capacity of the total population has been set, the higher one shows how much chemical there can be in the model before the organism being infected is overwhelmed and dies. When the organism dies, the model stops. A histogram (health bar) corresponds with the health line on the plot. ## HOW TO USE IT Click on setup and then go. Watch how the model runs with default settings. Do several runs with different values using the sliders initial-population and carrying-capacity. Try another run of the model and this time toggle the reinforcing-feedback switch on and off. Observe the difference in behavior. Try seeing how antiquorum works by letting the model run until it prompts you to click the world window. Buttons/Sliders/Switches/Plots: Buttons: Setup: Clears all agents from the world window and clears all plots. Go: Toggles between iterating the model, and stopping the model. Sliders: Initial-Population: Sets the initial starting population of bacteria. Carrying-Capacity: Sets the maximum number of bacteria that are allowed to be present in the model at any given iteration. Switches: Reinforcing-Feedback: Toggles between the bacteria responding to the presence of autoinducers as a source of positive feedback. Plots: Populations-Plot: Shows the amount of each agent set as well as the value of the carrying capacity (horizontal black line on the bottom of the plot) and a line that shows the total amount of toxin that can be in the world window before the model stops. Health-Histogram: Monitors the health of the organism by changing the height of the histogram based on the amount of toxin in the world window. When the bar disappears, the organism is considered dead, and the model stops. ## THINGS TO NOTICE See what different conditions give rise to a global change in the world window. ## THINGS TO TRY Try different values of population-size, carrying-capacity, and toggling reinforcing-feedback. How do each of these variables influence the behavior of the model? ## EXTENDING THE MODEL Try editing the set values in the code that specify the thresholds of the bacteria in response to autoinducers. What if antiquorum were disrtibuted differently? What if they changed the behavior of the bacteria differently? Could they be used to encourage self-organization? ## RELATED MODELS Ants! ## CREDITS AND REFERENCES Carrying-capacity code: ; Copyright 1997 Uri Wilensky. ( Simple Birth Rates ) @#$#@#$#@ default true 0 Polygon -7500403 true true 150 5 40 250 150 205 260 250 airplane true 0 Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15 arrow true 0 Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150 box false 0 Polygon -7500403 true true 150 285 285 225 285 75 150 135 Polygon -7500403 true true 150 135 15 75 150 15 285 75 Polygon -7500403 true true 15 75 15 225 150 285 150 135 Line -16777216 false 150 285 150 135 Line -16777216 false 150 135 15 75 Line -16777216 false 150 135 285 75 bug true 0 Circle -7500403 true true 96 182 108 Circle -7500403 true true 110 127 80 Circle -7500403 true true 110 75 80 Line -7500403 true 150 100 80 30 Line -7500403 true 150 100 220 30 butterfly true 0 Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240 Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240 Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163 Polygon -7500403 true true 162 150 400 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165 Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225 Circle -16777216 true false 135 90 30 Line -16777216 false 150 105 195 60 Line -16777216 false 150 105 105 60 car false 0 Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180 Circle -16777216 true false 180 180 90 Circle -16777216 true false 30 180 90 Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89 Circle -7500403 true true 47 195 58 Circle -7500403 true true 195 195 58 circle false 0 Circle -7500403 true true 0 0 300 circle 2 false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 cow false 0 Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167 Polygon -7500403 true true 73 210 86 251 62 249 48 208 Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123 cylinder false 0 Circle -7500403 true true 0 0 300 dot false 0 Circle -7500403 true true 90 90 120 face happy false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240 face neutral false 0 Circle -7500403 true true 8 7 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Rectangle -16777216 true false 60 195 240 225 face sad false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183 fish false 0 Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166 Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165 Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60 Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166 Circle -16777216 true false 215 106 30 flag false 0 Rectangle -7500403 true true 60 15 75 300 Polygon -7500403 true true 90 150 270 90 90 30 Line -7500403 true 75 135 90 135 Line -7500403 true 75 45 90 45 flower false 0 Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135 Circle -7500403 true true 85 132 38 Circle -7500403 true true 130 147 38 Circle -7500403 true true 192 85 38 Circle -7500403 true true 85 40 38 Circle -7500403 true true 177 40 38 Circle -7500403 true true 177 132 38 Circle -7500403 true true 70 85 38 Circle -7500403 true true 130 25 38 Circle -7500403 true true 96 51 108 Circle -16777216 true false 113 68 74 Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218 Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240 house false 0 Rectangle -7500403 true true 45 120 255 285 Rectangle -16777216 true false 120 210 180 285 Polygon -7500403 true true 15 120 150 15 285 120 Line -16777216 false 30 120 270 120 leaf false 0 Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195 Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195 line true 0 Line -7500403 true 150 0 150 300 line half true 0 Line -7500403 true 150 0 150 150 pentagon false 0 Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120 person false 0 Circle -7500403 true true 110 5 80 Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90 Rectangle -7500403 true true 127 79 172 94 Polygon -7500403 true true 195 90 240 150 225 180 165 105 Polygon -7500403 true true 105 90 60 150 75 180 135 105 plant false 0 Rectangle -7500403 true true 135 90 165 300 Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285 Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285 Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210 Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135 Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135 Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60 Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90 sheep false 0 Rectangle -7500403 true true 151 225 180 285 Rectangle -7500403 true true 47 225 75 285 Rectangle -7500403 true true 15 75 210 225 Circle -7500403 true true 135 75 150 Circle -16777216 true false 165 76 116 square false 0 Rectangle -7500403 true true 30 30 270 270 square 2 false 0 Rectangle -7500403 true true 30 30 270 270 Rectangle -16777216 true false 60 60 240 240 star false 0 Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108 target false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 Circle -7500403 true true 60 60 180 Circle -16777216 true false 90 90 120 Circle -7500403 true true 120 120 60 tree false 0 Circle -7500403 true true 118 3 94 Rectangle -6459832 true false 120 195 180 300 Circle -7500403 true true 65 21 108 Circle -7500403 true true 116 41 127 Circle -7500403 true true 45 90 120 Circle -7500403 true true 104 74 152 triangle false 0 Polygon -7500403 true true 150 30 15 255 285 255 triangle 2 false 0 Polygon -7500403 true true 150 30 15 255 285 255 Polygon -16777216 true false 151 99 225 223 75 224 truck false 0 Rectangle -7500403 true true 4 45 195 187 Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194 Rectangle -1 true false 195 60 195 105 Polygon -16777216 true false 238 112 252 141 219 141 218 112 Circle -16777216 true false 234 174 42 Rectangle -7500403 true true 181 185 214 194 Circle -16777216 true false 144 174 42 Circle -16777216 true false 24 174 42 Circle -7500403 false true 24 174 42 Circle -7500403 false true 144 174 42 Circle -7500403 false true 234 174 42 turtle true 0 Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210 Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105 Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105 Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87 Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210 Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99 wheel false 0 Circle -7500403 true true 3 3 294 Circle -16777216 true false 30 30 240 Line -7500403 true 150 285 150 15 Line -7500403 true 15 150 285 150 Circle -7500403 true true 120 120 60 Line -7500403 true 216 40 79 269 Line -7500403 true 40 84 269 221 Line -7500403 true 40 216 269 79 Line -7500403 true 84 40 221 269 x false 0 Polygon -7500403 true true 270 75 225 30 30 225 75 270 Polygon -7500403 true true 30 75 75 30 270 225 225 270 @#$#@#$#@ NetLogo 5.0 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ default 0.0 -0.2 0 1.0 0.0 0.0 1 1.0 0.0 0.2 0 1.0 0.0 link direction true 0 Line -7500403 true 150 150 90 180 Line -7500403 true 150 150 210 180 @#$#@#$#@ 0 @#$#@#$#@