This page was automatically generated by NetLogo 4.1.3.
The applet requires Java 5 or higher. Java must be enabled in your browser settings. Mac users must have Mac OS X 10.4 or higher. Windows and Linux users may obtain the latest Java from Java site.
powered by NetLogo
view/download model file: smart-diverse.nlogo
This is a test-bed / intuition pump for exploring how species might respond to a relatively rapidly changing environment. The basic idea is to compare and contrast two possible strategies. The first strategy is to maintain diversity in the population, so that at least some individuals are always ready to take advantage of the "new" environment. The second strategy is to "learn" about and "adapt" to the new environment, and then take advantage of "improved fitness." The environment is characterized by a single number, and the environment lasts for some given time period before changing again. There are two populations, the REDS and the BLUES. Each individual in each population has a "type" that characterizes how well they fit the environment. If their "type" number matches the "environment" number, then they are most "fit," and will reproduce most rapidly. The reds can "learn" about the new environment. During each time step, they each change their "type" to be closer to the environment. When their type closely matches the environment, they can then reproduce relatively rapidly. Until then, though, they are putting their efforts into "learning and adapting," and therefore do not reproduce. The blues can always reproduce, but their reproduction rate depends on how closely their "type" matches the environment. The blues reproduce more quickly if their type closely matches the environment, and less quickly otherwise.
The second question is what the type of the offspring will be. For the blues (who are using the "diversity" strategy), the offspring get a random type so each generation is just as diverse as the previous. For the reds, there are two possibilities, set by a boolean variable called "Memes." If Memes is false, then the offspring get a random type (just like the blues), so the red generations are diverse, but during their lifetimes they can learn about the environment to "improve" their reproductive rate. If Memes is true, then the red offspring are very similar to the type of their parent at the time of reproduction (which has changed during its lifetime by "learning," tracking the changes in the environment). This is labeled "Memes" to reduce charges of Lysenko/Lamarckism :-)
The terrain has a carrying capacity. When the carrying capacity is exceeded, some agents die. Each agent has the same chance of dying. In the long run, the population is held relatively constant (and the two species compete with each other for shares of the available capacity). To be visually interesting, the reds and blues move around, but their movement plays no particular role in the model. The model allows you to explore how various parameter values affect the ratio of reds to blues.
This model takes inspiration from an article in Science: "Phenotypic Diversity, Population Growth, and Information in Fluctuating Environments" by Edo Kussell and Stanislas Leibler, Science 23 September 2005; 309: 2075-2078; published online 25 August 2005, http://www.sciencemag.org/cgi/reprint/309/5743/2075.pdf but it is definitely not a direct "implementation" of the ideas in that article.
Each pass through the GO function represents a generation in the time scale of this model.
The CARRYING-CAPACITY slider sets the carrying capacity of the terrain. The model is initialized to have a total population of one tenth CARRYING-CAPACITY with half the population reds and half blues.
The LEARNING-RATE slider tells how quickly the reds learn about / adapt to each new environment. During each time step, they change their type in the direction of the enviroment type by the LEARNING-RATE amount.
The ENVIRON-MAX slider tells the range of possible environments. After a number of time steps (chosen randomly from 1 to TIME-IN-ENVIRON-MAX), a new environment is chosen randomly from 1 to ENVIRON-MAX.
The RED-GESTATION slider tells how many time steps it takes a reproducing red to hatch an offspring.
The boolean variable MEME tells whether RED offspring closely match their parent's type, or not.
The RED-SPREAD slider tells, under the meme-regime, the standard deviation of red offspring from their parent's type.
The NUM BLUES and NUM REDS monitors display the number of reds and blues respectively.
The GENERATIONS monitor displays the number of times there has been a birth and dying cycle.
The TYPE DISTRIBUTION monitor shows in a bar graph how many individuals of each type there are (REDS and BLUES).
The GO button runs the model. A running plot is also displayed of the number of reds, blues and total population (in green).
The RUN-EXPERIMENT button lets you experiment with many trials at the same settings. This button outputs the amount of time it takes for either the reds or the blues to die out given a particular set of values for the sliders. After each extinction (single digit population) occurs, all the graphics are cleared and another run begins with the same settings. This way you can see the variance of the number of generations till extinction.
Life is tough all over :-)
Try running an experiment with the same settings many times.
Does one population always go extinct? How does the number of generations till extinction vary?
I'm sure you can think of interesting extensions . . .
Built by Tom Carter, 2005. Inspiration as indicated above.
The code for this model is partially derived from the NetLogo Simple Birth Rates model, http://ccl.northwestern.edu/netlogo/models/SimpleBirthRates. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
See http://ccl.northwestern.edu/netlogo/models/SimpleBirthRates for terms of use.
globals [ generations ; counts how many generations have passed red-count ; population of red turtles blue-count ; population of blue turtles ; red-lag ; lagged red population ; blue-lag ; lagged blue population parent-type ; type of my parent environ ; integer environ indicator time-in-environ ; how long we stay in this environ ] turtles-own [ my-type ; turtle-type (to match with environ) time-til-repro ; number of time steps remaining until reproduction (-1 means not counting down) ] to setup clear-output setup-experiment end to setup-experiment cp ct clear-all-plots set generations 0 set environ 1 + random environ-max set time-in-environ 1 + random time-in-environ-max crt carrying-capacity / 10 [ ; setxy (random-float world-width) ; (random-float world-height) ; randomize turtle locations setxy (random-xcor) (random-ycor) ifelse who < (carrying-capacity / 20) ; start out with equal numbers of reds and blues [ set color blue ] [ set color red ] set my-type 1 + random environ-max set time-til-repro -1 ] ; set red-lag [0 0 0 0 0 0 0 0 0 0] ; set blue-lag [0 0 0 0 0 0 0 0 0 0] setup-plot plot-counts end to go wander live grim-reaper set generations generations + 1 set time-in-environ time-in-environ - 1 if time-in-environ = 0 [ set environ 1 + random environ-max set time-in-environ 1 + random time-in-environ-max ] ; set red-lag fput count turtles with [ color = red ] but-last red-lag ; set blue-lag fput count turtles with [ color = blue ] but-last blue-lag plot-counts end ;; to enable many repetitions with same settings to go-experiment go if red-count < 10 [ output-print ( word "red extinct after " generations " generations" ) setup-experiment ] if blue-count < 10 [ output-print ( word "blue extinct after " generations " generations" ) setup-experiment ] end to wander ask turtles [ rt random-float 30 - random-float 30 fd 5 ] end to live ask turtles [ ifelse color = red [ if my-type < environ [ set my-type my-type + learning-rate ] if my-type > environ [ set my-type my-type - learning-rate ] ifelse time-til-repro < 0 [ if (abs (environ - my-type)) < 2 [ set time-til-repro red-gestation ] ] [ if time-til-repro = 0 [ set parent-type my-type hatch 1 [ set color red ifelse Memes [ set my-type round random-normal parent-type red-spread ] [ set my-type 1 + random environ-max ] set time-til-repro -1 setxy (random-float world-width) (random-float world-height) ; randomize turtle locations ] ] set time-til-repro time-til-repro - 1 ] ] ; blue: [ ifelse time-til-repro < 0 [ set time-til-repro 1 + round ( 0.75 * min list (abs environ - my-type) (abs my-type - environ) ) ] [ if time-til-repro = 0 [ set parent-type my-type hatch 1 [ set color blue ; set my-type parent-type + (3 - random 7) set my-type 1 + random environ-max set time-til-repro -1 setxy (random-float world-width) (random-float world-height) ; randomize turtle locations ] ] set time-til-repro time-til-repro - 1 ] ] ] end ;; kill turtles in excess of carrying capacity ;; note that reds and blues have equal probability of dying to grim-reaper let num-turtles count turtles if num-turtles <= carrying-capacity [ stop ] let chance-to-die (num-turtles - carrying-capacity) / num-turtles ask turtles [ if random-float 1.0 < chance-to-die [ die ] ] end to plot-counts set-current-plot "Populations" set red-count count turtles with [ color = red ] set-current-plot-pen "Reds" plot red-count set blue-count count turtles with [ color = blue ] set-current-plot-pen "Blues" plot blue-count set-current-plot-pen "Environ" plot ( carrying-capacity * ( environ / environ-max ) ) set-current-plot-pen "Total" plot count turtles set-current-plot "Red-versus-Environ" set-current-plot-pen "red-v-environ" plot abs ( environ - mean [ my-type ] of turtles ) set-current-plot-pen "red-to-blue" plot environ-max * (( red-count / ( carrying-capacity ) ) ) set-current-plot "Type Distributions" set-current-plot-pen "my-type-red" histogram [my-type] of turtles with [ color = red ] set-current-plot-pen "my-type-blue" histogram [my-type] of turtles with [ color = blue ] ; if generations > 60 ; [ set-current-plot "Lagged" ; ; set-current-plot-pen "Red-lag" ; plotxy item Lag red-lag item 0 red-lag ; ; set-current-plot-pen "Blue-lag" ; plotxy item Lag blue-lag item 0 blue-lag ; ] end to setup-plot set-current-plot "Populations" set-plot-y-range 0 floor ((carrying-capacity / environ-max ) * 1.2) set-current-plot "Red-versus-Environ" set-plot-y-range 0 environ-max set-current-plot "Type Distributions" set-plot-x-range 0 environ-max set-plot-y-range 0 round (10 * (count turtles) / environ-max) set-histogram-num-bars environ-max ; set-current-plot "Lagged" ; set-plot-x-range 0 1.025 * carrying-capacity ; set-plot-y-range 0 1.025 * carrying-capacity end ; *** NetLogo Model Copyright Notice *** ; ; Portions of the code for this model were derived from a Simple ; Birth Rates Model. ; ; That 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. ; ; Copyright 1998 by Uri Wilensky. All rights reserved. ; ; Permission to use, modify or redistribute this model is hereby granted, ; provided that both of the following requirements are followed: ; a) this copyright notice is included. ; b) this model will not be redistributed for profit without permission ; from Uri Wilensky. ; Contact Uri Wilensky for appropriate licenses for redistribution for ; profit. ; ; ; To refer to this model in academic publications, please use: ; Carter, T. (2005). NetLogo Smart-Diverse model. ; ; ; *** End of NetLogo Model Copyright Notice ***