Implement basic form of `Allhoff2015` model
In their 2015 paper, Allhoff et al. implement and investigate an evolutionary food web model with permanent species turnover. This model can serve as a useful reference model for ODE-based niche models.
Model description
For a full description see the original paper, local citekey: Allhoff2015a
.
These are the key characteristics of the model:
- Species are characterised by three properties:
- body mass,
- prey body mass,
- and width of potential prey body mass spectrum
- Fast ecological processes: foraging, basically
- Multi-species generalisation of the bio-energetics approach by Yodzis and Innes (see references in paper)
- One basal resource
- Beddington-DeAngelis functional response, weighted with masses
- Gaussian feeding kernel
- Slow evolutionary processes: speciation events with fixed probabilities
- In investigated model, inherit only body mass from parent, use log scale for offspring
- Draw other properties anew using limited distributions
- Also: remove species with abundance below a threshold
Implementation
- Model name:
Allhoff2015
- Use an ODE solver (rather than a slow and tedious BGL implementation)
- Allhoff et al. use Runge-Kutta-Fehlberg (4,5)... could also consider using Runge-Kutta Cash-Karp (5,4), though if error estimation is feasible ...
- Will thus not have an object-oriented approach, but an ODE-based approach.
- Properties will be stored in vector-like data types. Depending on what the library allows, consider using armadillo objects ...
- Possible choice for ODE solvers:
-
GNU Scientific Library's ODE solvers... very old-school and complicated (raw arrays, no templating!) -
Boost ODEint ... looks promising and allows arbitrary state types.
- Simple example here.
- Also supports parallelisation via TBB, if speed is an issue...
-
- Upon speciation or change in interaction network, have to rebuild interaction matrix, feeding overlaps, etc.
- Keep close to the naming of the paper.
- Make more parts of the dynamics configurable than they have studied in their paper, perhaps via template arguments
- Number of basal resources
- Inheritance of other properties from parent
- Limits of inherited properties' mutations: allow open limits?
- Could consider keeping track of genealogy ... low priority though (for now)
Data writing
- Can still write out data using the mesonet
DataManager
and using theHeterogeneousTimeSeriesGroup
on dantro-side - With the properties stored in vector-like data types, might not be able to keep track of species IDs. But if it's not too difficult, try it.
Edited by Yunus Sevinchan