Plant Speciation

No preview image

1 collaborator

Default-person Andrew McDevitt (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.0 • Viewed 99 times • Downloaded 10 times • Run 0 times
Download the 'Plant Speciation' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

This is a model of parapatric speciation, where two subpopulations of a species split into two non-interbreeding species while still remaining in contact with each other. This is in contrast to allopatric speciation, where two geographically separated subpopulations of a species diverge into two separate species. The specific situation modeled is that of the speciation of a metal-tolerant variety of plant on the boundary between clean and contaminated ground.

The model is inspired by a paper by Antonovics (2006) which describes a real-life example of a subpopulation of a species of grass on the boundary of a contaminated region that has developed an offset flowering time from the surrounding grass.

HOW IT WORKS

The model simulates individual plant organisms that inhabit a rectangular grid of patches. Each tick, the model simulates either one day in a year of a plant or one year (a complete generation of plant life): the currently existing plants fertilize each other, produce offspring, and die.

The environment the plants inhabited has two zones: the left zone (green) is normal earth, but the right zone (blue) is contaminated with metals from a nearby mine. The initial population can live there but has little tolerance for metals and prefers the clean zone on the left. Tolerance for metals is a heritable attribute that can change via mutation and recombination over the generations. Plants with a low tolerance for metals are best suited to live on the left side of the environment, and those with a high tolerance are best suited to live on the right side.

Plants also have a flowering time, which determines which other plants the plant can fertilize and be fertilized by. Plants that do not flower during any of the same days of the year cannot fertilize each other. Plants that flower on more of the same days have a better chance of fertilizing each other than plants that flower on less of the same days. While plants can fertilize themselves, only plants within a certain radius can fertilize each other.

Metal tolerance and flowering time are represented as real numbers; metal tolerance is always between 0.0 (very low tolerance) and 1.0 (very high tolerance).

The key mechanism that drives speciation to emerge in this model is a fitness function. This fitness function (f) is dependent on metal in the ground (m) and tolerance of the plant to metal (t). Metal tolerance slows plant growth down in healthy soil, but allows it to survive and grow in soil with heavy metal concentrations.

Fitness is a hyperbolic paraboloid function that can be visualized as a linear function dependent on tolerance whose slope and y-intercept also vary linearly with respect to increases in metal in the soil. This linear function would have the following slopes in various metal levels:

  • negative slope in clean ground -> high tolerance is bad
  • positive slope in dirty ground -> high tolerance is good
  • slope of zero: in between -> no benefit or disadvantage to any tolerance level

This is a model of a "tradeoff", where specializing in one variation of a trait is advantageous in one environmental extreme, but specializing in another variation of the trait is advantageous in a different environmental extreme. Intermediate "hybridization," or averaging between both variations, is disadvantageous in both environments or at least not advantageous in any. Such tradeoff models can lead to speciation when other traits permit a population to reproductively fragment and isolate itself into non-interbreeding sub populations.

The hyperbolic paraboloid or saddle shaped function that is used in the model is dependent on metal amount and tolerance. A general form of this fitness function would be the following: fitness = (1 + (A * t * m + B * t * m - C * t * m) - ( A * t + B * m) )

  • where fitness is 1 at clean ground and no tolerance
  • A is the penalty (0 to 1) for having tolerance in clean ground: so fitness is (1 - A)
  • B is the penalty (0 to 1) for having the highest level of metal in the ground and no tolerance, so fitness is (1 - B)
  • C is the penalty (0 to 1) for having the highest tolerance in the highest level of metal, so fitness is (1 - C)

As long as C is less than both B and A, then you will have a fitness function that may drive the emergence of speciation. The fitness function has been hard coded in the model to use A = .4 and B = .4 and C = 0 :

   set fitness (1 - m) * (1 - .4 * t) + m * (1 - .4 * (1 - t))

HOW TO USE IT

VISUALIZE-TIME-STEPS: This can be set to "days" so that the flowering of the plants can be visualized during the year and the growth of seedlings and death of old plants can be visualized at the end of the year. When set to "years" the model skips these visualizations and runs much quicker.

GENETICS-MODEL: Allows you to change the recombination rules for sexual reproduction. If set to "avg. genotype", the parent genotypes are averaged in the offspring. This is a simplification of hybridization outcomes. Speciation should be more difficult to achieve at this setting since variation is removed more readily than using Mendelian genetics models (that retain variation in genotype over many generations through recessive alleles). However, speciation can still emerge at this setting. If set to "sex linked genes" the genotype is inherited from the male (pollen) only.

SHOW-LABELS-AS: Shows the value for "metal in soil" for each patch, the "metal tolerance" for each plants", or the "flowering time" for each plant.

FRONTIER-SHARPNESS: Controls the width of the gradient between the clean and contaminated sides of the environment.

POLLEN-RADIUS: Controls the distance pollen travels during sexual reproduction.

FLOWER-DURATION: This slider determines how long a flower is open--two plants whose flowering times are separated by more than this margin cannot fertilize each other. Even when two plants flower close enough together to fertilize each other, fertilization is less likely the larger the difference in flowering time.

PLANTS-PER-PATCH: The maximum number of plants that can live on the same patch. If there are too many plants in a patch those least fitted to the local metal concentrations will die.

CHANCE-TOLERANCE-MUTATION and CHANCE-FLOWER-TIME-MUTATION: These sliders control the probability of mutations in metal tolerance and flowering time.

There are a variety of plots. The histograms show the distribution of metal tolerance and flowering time for plants on the left and right side of the environment. Graphs on the right show the mean tolerance and flowering time for the left and right sides of the environment over time. The "simultaneous flowering" graph shows the probability that a randomly chosen plant from the left flowers at the same time as a randomly chosen plant from the right--that is, the probability that they can fertilize each other. If this nears 0 speciation has occurred--the left and right sides are no longer interbreeding. Though the model only rarely reaches this value as 0, it does often achieve stable states very close to 0, showing that the first step in speciation has been achieved -- that a population has split into two sub-populations that are co-evolving behavior to reinforce sexual isolation from one another.

THINGS TO NOTICE

The simplest case is to turn off all recombination and run the model with the default settings. Notice that metal tolerance mutations will accumulate in a few individuals before simultaneous flower time begins to drop. Speciation (sexual isolation) emerges after specialization of the population into two groups, to decrease gene flow between the groups and further increase odds of survival for offspring.

When the whole population interbreeds there is a homogenizing force that keeps the plants on the right from becoming too metal tolerant--their genes are constantly diluted by genes from the intolerant left-side plants. Eventually, there will be a runaway effect where the left and right sides develop somewhat different flowering times (due to genetic drift), which decreases the flow of genes between the sides allowing the right to develop higher metal tolerance. This makes it increasingly disadvantageous to breed with left-side plants, creating selection pressure to increase the difference in flowering times further until the left and right are completely non-interbreeding and thus might be called separate species--this is called "reproductive isolation", the last step of speciation.

THINGS TO TRY

If you change the FRONTIER-SHARPNESS to make a more gradual shift in metal concentrations between the left and right sides of the environment, speciation will still emerge.

Sometimes flower-times for one population become isolated between two sub-groups in the other population, making for 3 effectively non-interbreeding sub-populations. This shows how one speciation event can fragment the reproductive compatibility of the other population leading to even more possible species.

Because of what is described above, parapatric speciation (in which two budding species continue to exchange genes as they diverge) is a rare form of speciation. More commonly accepted is the idea of allopatric speciation, which avoids these difficulties by positing that species arise when two subpopulations are separated completely, so that they cannot exchange genes and there is no homogenizing force preventing them from developing reproductive isolation. However, the process observed in the model where partial reproductive isolation allows increased differentiation due to selection, which in turn encourages more complete reproductive isolation, is often held to "reinforce" allopatric speciation when the two separated subpopulations come back into contact with each other.

Playing with the other parameters of the model can alter the details of what happens; in particular the flow of genes between the sides is affected by fertilization-radius and flower-duration in proportion to the world size.

EXTENDING THE MODEL

Allopatric speciation could be modeled by introducing physical barriers into the environment.

NETLOGO FEATURES

Complex plotting procedures: The histograms plot the populations of two regions each with a different color pen.

RELATED MODELS

All the models from the BEAGLE curriculum.

CREDITS AND REFERENCES

This model is a part of the BEAGLE curriculum (http://ccl.northwestern.edu/rp/beagle/index.shtml)

Antonovics, J. (2006). "Evolution in closely adjacent plant populations X: long-term persistence of reproductive isolation at a mine boundary". Heredity, 97(1), p33-37.

HOW TO CITE

If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.

For the model itself:

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

Copyright 2012 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit https://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

turtles-own [ tolerance fitness flower-time seedling? will-die? ]
patches-own [ metal barrier? ]

globals [
   day                             ;; monitor value
   year                            ;; current year
   old-year                        ;; previous year
end -of-days-counter             ;;
   transition-time?                ;;
   old-visualize-time-steps-state  ;; allows for switching between visualization modes during model run
   chance-death-per-year           ;; the probability that the plant will die this year
   chance-seed-dispersal           ;; the probability that a newborn plant grows in a patch adjacent to its parents', instead of in the same patch.
   average-number-offspring        ;; avg. number of seeds dispersed by the plant when it does disperse them
   percent-same-flowering-time
   plant-type
]

to setup
  clear-all
  ;; initialize globals
  set day 0
  set old-year 0
  set year 0
  set end-of-days-counter 0
  set percent-same-flowering-time 0
  set plant-type "annual"
  set chance-death-per-year 10
  set chance-seed-dispersal 50 ;; set to 50% by default
  set average-number-offspring 3
  set transition-time? false
  set old-visualize-time-steps-state visualize-time-steps

  ;color the frontier
  ask patches [
    set barrier? false
    setup-two-regions
    set pcolor calc-patch-color metal
  ]

  ;spawn the initial population -- carrying-capacity-per-patch allows more than plant at this patch
  ask patches with [pxcor = min-pxcor] [
    sprout plants-per-patch [
      if initial-tolerance = "all no tolerance" [set tolerance 0]
      if initial-tolerance = "all full tolerance" [set tolerance 100]
      if initial-tolerance = "random tolerances" [set tolerance random-float 100]
      set flower-time (365 / 2)
      set heading random 360
      fd random-float .5
      set fitness 1
      set shape "plant"
      set seedling? false
      set will-die? false
      set color calc-plant-color tolerance
    ]
  ]
  reset-ticks
end 

to setup-two-regions
  ;; set the metal value based on the width designated by the frontier-sharpness slider value
  set metal precision (100 / (1 + exp (frontier-sharpness * ((max-pxcor + min-pxcor) / 2 - pxcor)))) 0
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; RUNTIME PROCEDURES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
   check-labels
   ;; if visualization switched during model run, redraw plants
   if old-visualize-time-steps-state != visualize-time-steps [
     ask turtles [
       redraw-plants-as-full-sized-plants
     ]
   ]

  if visualize-time-steps = "years" [
    set day 0 ;; always at day 0 in years mode
    set year year + 1
    ask turtles [ redraw-plants-as-full-sized-plants  ]
    do-start-of-new-year-events
  ]

  if visualize-time-steps = "days" [
    visualize-bloom
    do-end-of-days-events
  ]
  tick
end 

to do-start-of-new-year-events
  if year > old-year [
    do-reproduction
    mark-turtles-to-kill
    kill-marked-turtles
    set old-year year
  ]
end 

to do-end-of-days-events
  ifelse day = 365 [  ;; at end of year
    if transition-time? = false  [
      do-reproduction
      mark-turtles-to-kill
      set transition-time? true
    ]
    ;; 10 ticks of transition time will elapse between years when visualize-time-steps is in "day" mode
    ;; this transition time is for animation events to show death and growth of new plants before the next
    ;; year begins. It is done before day 0 of the new year so that these visualizations do not interfere
    ;; with flower time speciation mechanisms in the model

    if transition-time? [
      set end-of-days-counter end-of-days-counter + 1
      ;; grow the new plants to be visible for the next season
      ask turtles with [seedling?] [visualize-seedling-growth]
      ;; shrink and fade the plants that are going to die
      ask turtles with [will-die?] [set size (1 - (end-of-days-counter / 10))]

      if end-of-days-counter > 9 [  ;; start a new year
        set year year + 1
        set end-of-days-counter 0
        set transition-time? false
        set day 0
        ask turtles [turn-seedlings-into-full-plants]
        kill-marked-turtles
      ]
    ]
  ]

  ;; the else event
  [set day day + 1]
end 

;; make babies

to do-reproduction
  ask turtles [
    ;; construct list of potential mates based on pollen-radius slider
    let potential-mates []
    let nearby-turtles turtles
    if (pollen-radius < (max-pxcor - min-pxcor)) [set nearby-turtles turtles in-radius pollen-radius]
    let num-candidates 10
    ifelse count nearby-turtles < 10 [ set potential-mates (sort nearby-turtles) ]
                                     [ set potential-mates (sort (n-of 10 nearby-turtles))
                                       set potential-mates (fput self potential-mates)]

    ;; pick mate randomly weighted by compatibility
    let compatibilities map [ [potential-mate] -> compatibility self potential-mate] potential-mates
    let mate (pick-weighted (potential-mates) (compatibilities))

    ;; spawn children
    hatch (random-poisson average-number-offspring) [
      set seedling? true
      set will-die? false
      ifelse visualize-time-steps = "days" [ set size 0.0] [set size 1.0]

      ;combine parents' genes and give average value of to the child
      if genetics-model = "avg. genotype" [
        set tolerance (tolerance + [tolerance] of mate) / 2
        set flower-time (flower-time + [flower-time] of mate) / 2
      ]

      ;mutate tolerance gene
      if (random-float 100) < chance-tolerance-mutation [
        set tolerance (tolerance + (random-normal 0 20))
      ;; set tolerance (tolerance + random tolerance-mutation - random tolerance-mutation)
      ]

      ;mutate flowering time gene
      if (random-float 100) < chance-flower-time-mutation [
        set flower-time (flower-time + (random-normal 0 10))
      ]

      ;; keeps values from going above a min and max
      if tolerance < 0 [ set tolerance  0 ]
      if tolerance > 100 [ set tolerance 100 ]
      if flower-time < 0 [ set flower-time 0 ]
      if flower-time > 365 [ set flower-time 365 ]

      ;change color to reflect metal tolerance
      set color calc-plant-color tolerance
      migrate-this-plant
    ]

   if plant-type = "annual" [set will-die? true] ;end of the generation
  ]
end 

;kill ill-adapted turtles and fix solve overpopulation

to mark-turtles-to-kill
  ask turtles [
    let t tolerance / 100
    let m metal / 100
    ;; Fitness is a linear function dependent on tolerance whose slope and y-intercept
    ;; vary linearly with respect to an increases in metal amount.
    ;; This linear function would have the following slopes in various metal levels:
    ;; (i.e. negative slope in clean ground -> high tolerance is bad
    ;;       positive slope in dirty ground -> high tolerance is good
    ;;       zero     slope in between      -> no benefit or disadvantage to any level of tolerance )

    ;; This is a model of a "tradeoff", where specializing in one variation of trait is advantageous
    ;; in one environmental extreme, but specializing in another variation of the trait is advantageous in a different
    ;; environmental extreme. Intermediate "hybridization" or averaging between both variations is disadvantageous
    ;; in both environments or at the very least it is not advantageous in either extreme environment.
    ;; Such tradeoff models can lead to speciation when other traits permit a population to reproductively
    ;; fragment and isolate itself into non-interbreeding sub populations.

    ;; This makes for a hyperbolic paraboloid or saddle shaped function that is dependent on metal amount and
    ;; tolerance.  A general form of this fitness function would be the following:
    ;; set fitness ((1 +  (A * t * m + B * t * m - C * t * m) - ( A * t + B * m) ) )
    ;; where fitness is 1 at clean ground and no tolerance
    ;; A is the penalty (0 to 1) for having tolerance in clean ground, therefore fitness is (1 - A)
    ;; B is the penalty (0 to 1) for having the highest level of metal in the ground and no tolerance, therefore fitness is (1 - B)
    ;; C is the penalty (0 to 1) for having the highest tolerance in the highest level of metal, therefore fitness is (1 - C)
    ;; As long as C is less than both B and A, then you will have a fitness function that can be used in this section
    ;; The fitness function has been hard coded here to use A = .4 and B = .4 and C = 0

       set fitness (1 - m) * (1 - .4 * t) + m * (1 - .4 * (1 - t))

    ;; survival probability based on fitness
    if (random-float 1) > (fitness) [set will-die? true]
    ;; survival probability based on fixed number of additional deaths-a-year
    if random-float 100 < chance-death-per-year [set will-die? true]
  ]

  ;; In overpopulated patches, kill the least fit plant until we are down to the carrying capacity
  ask patches [
    let overpopulation ((count turtles-here) - plants-per-patch)
    if overpopulation > 0 [
      ask (min-n-of overpopulation turtles-here [fitness]) [
        set will-die? true
      ]
    ]
  ]
end 

to migrate-this-plant ;; turtle procedure
  ;; Some plants grow in patch adjacent to the parent plant. This represents migration from seed dispersal
  if (random-float 100) < chance-seed-dispersal [
    move-to one-of neighbors
    rt random 360  fd random-float 0.45  ;;spread out plants that are on the same patch
  ]
end 

to kill-marked-turtles
    ask turtles with [will-die?] [die]
end 

to turn-seedlings-into-full-plants
         if seedling? [set seedling? false]
         redraw-plants-as-full-sized-plants
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; visualization procedures ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to check-labels
  ask patches [
  ifelse show-labels-as = "metal in soil"
    [set plabel metal]
    [set plabel ""]
  ]
  ask turtles [
    if show-labels-as = "metal tolerance" [set label precision tolerance 0]
    if show-labels-as = "flower time"  [set label precision flower-time 0 ]
    if show-labels-as = "none" [set label ""]
  ]
end 

to redraw-plants-as-full-sized-plants ;; turtle procedure
  set shape "plant"
  set size 1
end 

to visualize-seedling-growth ;; turtle procedure
  if seedling? [set size (end-of-days-counter / 10) ]
end 

to visualize-bloom
  ask turtles [
    ;; If day of the year is greater than this plants flower time and less than the flower time plus the length of flower time, then it is in the
    ;; the flowering time window and a flower should be located here
    ifelse day >= (flower-time  ) and day <= (flower-time + (flower-duration)  )
       [ set shape "flower"]
       [ set shape "plant" ]
  ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; reporters  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; make a random choice from  weighted by 
;; where highly weighted choices are more likely to be selected than others

to-report pick-weighted [ options weights ]
  let wsum 0
  foreach weights [ [weight] ->
    set wsum (wsum + weight)
  ]
  let wret wsum * (random-float 1)
  let ret 0
  set wsum 0
  foreach weights [ [weight] ->
    set wsum (wsum + weight)
    if wsum > wret [ report (item ret options) ]
    set ret (ret + 1)
  ]
end 

;; compatibility is a decreasing function of the difference in flowering times
;; since plants that have more of an overlap between flower-times are more likely
;; they will pollinate one another

to-report compatibility [ t1 t2 ]
  let diff abs ([flower-time] of t1 - [flower-time] of t2)
  ifelse diff < flower-duration [ report (flower-duration - diff) ] [ report 0 ]
end 

;; calculate the patch color based on the presence of metal in the soil

to-report calc-patch-color [ m ]
  report rgb 0 (255 * (1 - (m / 100)) / 2) (255 * (m / 100) / 2)
end 

to-report calc-plant-color [ t ]
  let black-pcolor rgb 0 0 0
  ifelse barrier?
    [report black-pcolor]
    [report rgb 0 (255 * (1 - (t / 100)) ) (255 * (t / 100) )]
end 


; Copyright 2012 Uri Wilensky.
; See Info tab for full copyright and license.

There is only one version of this model, created about 2 years ago by Andrew McDevitt.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.