Plant Speciation
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.
For a short relevant background reading try http://en.wikipedia.org/wiki/Speciation
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 may die (depending if the plants are set to be annual or perennial plants).
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
PLANT-TYPE: When set to "annual", all old plants die at the end of the year. "Perennial" allows some old plants to remain behind to re-flower the next year.
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.
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, CHANCE-FLOWER-TIME-MUTATION, FLOWER-TIME-MUTATION-STDEV, AND TOLERANCE-MUTATION-STDEV: These sliders control the probability and magnitude 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 decide to run the model with plants as annuals, decrease the DEATH-PER-YEAR (to around 10%) so that enough plants (including seedlings) are alive for the next generation, and increase the DEATH-PER-YEAR value if running with plants as perennials (so that old plants die off more readily and don't remain in ground blocking out new arrivals).
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/simevolution/beagle.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 in a publication, we ask that you include these citations for the model itself and for the NetLogo software:
- Novak, M., McGlynn, G. and Wilensky, U. (2012). NetLogo Plant Speciation model. http://ccl.northwestern.edu/netlogo/models/PlantSpeciation. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
COPYRIGHT AND LICENSE
Copyright 2012 Uri Wilensky.
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://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
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 ] 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 chance-death-per-year 10 ;; set to 10% by default 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 [compatibility self ?] 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 tolerance-mutation-stdev)) ;; 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 flower-time-mutation-stdev)) ] ;; 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 fromweighted by ;; where highly weighted choices are more likely to be selected than others to-report pick-weighted [ options weights ] let wsum 0 foreach weights [ set wsum (wsum + ?) ] let wret wsum * (random-float 1) let ret 0 set wsum 0 foreach weights [ set wsum (wsum + ?) 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 are 4 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Plant Speciation.png | preview | Preview for 'Plant Speciation' | over 11 years ago, by Uri Wilensky | Download |
This model does not have any ancestors.
This model does not have any descendants.