> > Here's the basic idea behind evolution's "algorithm":
> >
> > BEGIN EVOLVE
> > Begin at a random location.
> > Select a random location and move there.
> > Repeat EVOLVE
> > END EVOLVE
> >
> > Notice that even if the replicator reaches B, evolution will move
> > it off B and back again.
>
> Let me try this C++ pseudocode fragment [trying to understand this]:
>
> Species::Evolve(Environment& CurrEnv)
> {
> // Begin at a random location with nonzero survival function; this should
> // be handled by the constructor
>
> ApplyMutationRules() // defines legal types of mutations, and applies
> // them 'randomly' when generating next time-slice's
> // population from this time-slice's population;
> // also subsumes any replicative activity
>
> ApplySurvivalFunction(CurrEnv) // requires every population member in the
> // next time-slice to pass a survival
> // check or be eliminated
>
> UpdateTime() // makes the latest time-slice generated current
> }
>
> "Species" is an abstract class here. All three functions referred to
> above would have to be implemented for any concrete use of "Species";
> ideally, we aren't allowed to construct objects of type Species.
> [Compiler error!]
This looks correct to me.
Please remember that EVOLVE is a simplified version of evolution.
For example, it does not even mention sex, genetic crossover, genotypes,
phenotypes, parasites, or fitness evaluation, all of which are very
important to evolution. EVOLVE was designed to demonstrate two of
evolutions most powerful tools: its randomness and its endlessness.
An excellent C++ library for genetic algorithms is MIT's GALib. The URL
is:
http://lancet.mit.edu/ga/Register.html
-- David Leeper dleeper@gte.net Homo Deus http://home1.gte.net/dleeper/index.htm 1 + 1 != 2 http://home1.gte.net/dleeper/CMath.html