About Evolute C#


Watch Evolute logo on youtube

What Exactly is "Evolute C#"?
Evolute C# is a genetic programming library, which is used to create and evolve programs randomly.
The main focus of the library is to give an easy feeling to the user. You know those libraries, that you download, and you need to look at the "specification"? or perhaps you need to break your head in trying to do something because there are no examples. Evolute is not something like that. Therefore, the library usage is well documented and no such quick "dOXYGEN" crap will be here, at least not at first.

What is genetic programming?
Genetic programming is an algorithm that was really expanded by John Koza, at first, the computer generates a population of completely random programs,
Later, the programs are being run and the user gives a fitness, or mark, for each program. The algorithm will use this fitness in order to select individuals from the population that are better than others for some future genetic operations.
The genetic operations are cloning, crossover and mutation.
After we have selected the "relatively good" individuals from the population, we randomly select an action to perform.
Cloning, means for this relatively good individual, we just copy it to the next population of the next generation.
Crossover, means for two relatively good individuals, we create new two sons, that part of their code is taken from parent one, and the other part is taken from parent two.
Mutation, means take a random part of the code and replace it with totally new random code.
after many such cycles, called "generations", that these actions are being performed on the relatively good individuals, we expect that the code will get better. and so it does - after a while we get programs that perform better at the tasks we wanted them to perform.

Overall, genetic programming is a search and optimization algorithm.

For more info about Genetic Programming (about the algorithm itself), look at : http://www.genetic-programming.org/


Release 0.2 (23.2.2013)


Hi, my name is Itay. And this is Release 0.2, the second release of Evolute C#.
A few trials and attempts have been made for progressing Evolute C# performance. Including Automatic function definitions, island mechanisms, population destruction, higher chance to select worse individuals, gene expression programming/grammatical evolution, and individual protection mechanisms.
Few of the mechanisms were too complicated, lacked performance for the required tests, and did not make it to this release.

By using the new 0.2 features, the evolution performance in Evolute C# 0.2 generally outperforms Evolute C# 0.1 when trying to reach fitness goals of complex problems.

Notable performance examples :
* Evolute 0.2 has evolved a function that draws a circle reaching 0.7 fitness (out of maximal fitness of 1000), when scanning 300 out of 10,000 pixels. Evolution time 8 hours on Q6600. The project will be included inside the library examples.
* Evolute 0.2 has evolved a boolean function that returns true if a sound is "Do" or false if the sound is not "Do" with up to 80% test sample accuracity. Evolution time 18 hours on Q6600.
* Evolute 0.2 has evolved a creature who's goal is to travel the most distance in a tunnel system. The creature was able to travel fairly well within an hour. The project will be included inside the library examples.


it can be downloaded here : Download link

What's new?

- Introducing the ability to save and load tree language programs from file
- Introducing the ability to evolve programs that contains a number of results. (A number of roots)
- Introducing the ability to add an additional information objects to a program and get use it in the program's functions
- Introducing islands and parameters controlling the islands (Island size, migration rate, and more)
- Introducing mutation
- Introducing control parameter : "Always take better individuals" for tournament selection
- Introducing parsimony pressure which enables evolution at huge population sizes
- Introducing control parameter in what rate to re-evaluate elitist individuals. (To enhance evolution dramatically when dealing with chaostic environments)
- Other little enhancements


Release 0.1 (6.3.2010)


Release 0.1 is the first release of Evolute C#.

it can be downloaded here : Download link

Features :

- Tree language.
- The ability to create and randomize programs and evolve them on the tree language
- The ability to run tree language programs.
- The ability to add new tree language functions and to decide the variables and functions on the random programs
- The ability to give fitness to each program based on it's output.
- Settings such as initial tree depth, maximal tree depth, and more..
- Tournament selection only, with overselection option.
- There's multithreading.
- The tree programs are being evaluated by interpretation.
- Statistics at the end of each generation, such as getting the min and max fitness programs.
- A drawing function to use on windows forms to view a tree.
- No automatic function discovery
- No mutation
- Only one root per program limitation