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

WHAT IS IT?

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.


HOW TO USE IT

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.


THINGS TO NOTICE

Life is tough all over :-)


THINGS TO TRY

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?


EXTENDING THE MODEL

I'm sure you can think of interesting extensions . . .


CREDITS AND REFERENCES

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.


PROCEDURES

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 ***