↪ Program documentation
- Overall description
- How to execute Evolife (+ download)
- Evolife source files
- Evolife classes and functions
- How Evolife works
- Create your own Evolife scenario
- Use Evolife’s components separately (graphics, ecology, genetic algorithm)
1. Overall description
has been developed by Jean-Louis Dessalles
for scientific and didactic purposes. Initially written in C++, it has been entirely rewritten in Python
to improve readability.
The core of Evolife
is a genetic algorithm (GA). In a GA, ‘individuals’ represent variant tentative solutions to a problem. Individuals’ behaviour is controlled by a binary vector called genome
or DNA. They live, and reproduce ‘sexually’ (though sexes are usually not differentiated). Reproduction is achieved by hybridizing genomes through crossover. Each ‘year’, best individuals are selected for reproduction. Evolife
implements two modes of selection:
- ranking: individuals are ranked according to their score, and are granted a number of potential children that is an increasing (non-linear) function of their rank.
- differential death: individuals get life points (generally in relation to their score) that protect them from life hazards, and thus increase their life expectancy (and their opportunities to reproduce).
The first method is more in line with typical GA, whereas the second one looks more ecological.
Scores depend on a ‘problem’ to be solved. A few problems are already coded in the package, such as:
- the binary sum: the (somewhat trivial) problem is to maximize the number of 1 in the genome. This problem is given for didactic purposes, to demonstrate the respective roles of mutation and crossover in speeding evolution toward the optimum.
- the labyrinth: the GA’s job is to go out of a maze. Users can control the evaluation function. The labyrinth can be displayed with the current best trajectory.
- the favourable mutation: very Darwinian in its spirit, this scenario allows to understand the conditions under which favourable mutation spread in an evolving population.
is modular, which means that its code can be understood locally without full understanding of the whole programme.