A quick description of the what I am attempting to do with the initial Rust
version of "Ogre" (the design / simulation could almost certainly be done more
sensibly / efficiently but the C++ code was itself an exercise some years ago -
so to be able to compare apples with apples, the rough design should be same -
I can explain the genetics to anyone who is interested):

- A population object is represented by an array (the simplest population being
a 2x1 array)

- A sub-population (deme) object is represented by a cell in the array

- A deme consists of two ordered, linked list (Parent, Offspring) objects

- The parent list is say 100 organisms long

- Each organism object in each list consists of a large, random number (an
identifier and ordering number within the list - say "id") and a small integer
in something resembling a normal distribution between 1 and 19 (say "ru") for
the deme

A generation cycle consists of:

- Each organism (think bacteria) in the Parent list producing two offspring
organisms which are inserted into the same deme's Offspring list

- At each organism "birth", the Offspring "inherits" from
  the Parent organism its "ru" value with the chance (say 1%) of it
  mutating by the addition of -1 or +1 (between the range of 0 and 20)

- A defined percentage of an Offspring in each deme migrating to an adjacent
deme (say 1%)

- The parent list dying off (in the C++ program, this was accomplished in a
quick and dirty way by pointing the Parent list pointer to NULL)

- Pointing the Parent list pointer to the Offspring list

- Removing all organisms in the Parent list after position 100 (the "Carrying
Capacity" of the cell)

- Creating a new Offspring list

Each generation is repeated a set number of times - say "g".

As the program runs, the state of the population after each generation is
recorded so the population genetics stats can be done for each generation (eg
intra and inter deme diversity)