Abstract model of nutrient cycling in an ecosystem
A model I created in Winter '94-'95 while re-taking the final year of my
This discrete model was originally designed to investigate speciation in asexual
organisms. The assumption was that metabolism requires organisms to change
their chemical environment from one that contains nutrients to one the
contains waste products. The interactions of different organisms, with
different nutrient requirements, set up nutrient cycles. These cycles
produce temporal concentrations of nutrients that affect the fitness of the
organisms at each particular time. Surviving organisms produce offspring
that may have mutations in their nutrient requirements.
I hoped that this
model would show speciation events. Although these occur, the practical
limitations of the model may not allow these events to be given much
significance: they may just be artifacts of the model. However, the model
does exhibit some interesting effects.
Details of the model
This version of the model considers interactions between eight abstract
"nutrients". There is a finite amount of nutrients but any nutrient can be
converted into any other nutrient by the action of an "organism". The size of the
nutrient space is specified by the user as "Space"
have four parameters:
- phi: this number specifies the input nutrient of the
- psi: this number specifies the output nutrient of the
- energy: in this model, this can only have two values.
1 if the organism has managed to find an input nutrient at this time.
O if the organism has not managed to find a nutrient. A the end of
time interval all organisms that have energy=0 are killed. There is
a further proviso that if the input nutrient is the same as the
output nutrient then the organism will not gain energy.
- mutation_rate: this regulateds the mutation of phi, psi,
and mutation_rate. If mutation rate is N then a mutation will occur
once in every N trials (on average). The intial mutation rate is
specified by the user, as is the random seed On some computers
this will allow histories to be repeated.
typical output screen
The first eight columns on the left represent the numbers of nutrient in
each state. The second eight columns represent the numbers of organisms per
input nutrient type. The next column represents the total number of
organisms at that time. (In all these column the numbers are represented in
base-16, this reduces the amount of horizontal space required to display the
data). The last two columns give the time and the average mutation rate.
This model was inspired by reading:
- Hopwood, D.A. & Chater, K.F. (1989) "Genetics of Bacterial
Diversity", Academic Press, London
- Nicholls, D.G. & Ferguson, S.J. (1992)
"Bioenergetics 2", Academic Press, London
Programs... (Virus free by Norton Antivirus 5.0 - although I haven't
updated this virus library recently)
- evomuteb.cpp c++ source code -
- evomuteb.exe Windows 3.1 executable
- em990707.cpp re-annotated c++ source
code - 7/7/99
- Not compiled -
- In another model, I used an approximate Gibbs energy function
to calculate an energy production. This energy function was damped
by a constant energy loss. I then mimiced photo-ionisation by
pumping nutrients from one fixed state to another fixed state.
By doing this, I hoped to show energy webs being created around the
main nutrient pump.
The only thing I remember about the results, was that for low values
of a certain parameter, nutrient cycling happened spontanteously,
without the aid of a pump. This is one of the of the limitations of
this discrete model. The differences between the approximations used
in the Gibbs Energy calculation, and the discrete size of the
organisms energy requirements makes the model unstable. This is
interesting in that discrete systems also occur in languages.
- gibbsimc.cpp c++ source code -
- gibbsimc.exe Windows 3.1 executable
- gibbsimd.cpp c++ source code -
- gibbsimd.exe Windows 3.1 executable
- I haven't looked at these versions for a while they may not
- Next stage: file output - format?
- Extended parameter space mappings - performing multiple runs
with different initial parameters and tabulating the results.
Links at other sites...