Skip to content

Latest commit

 

History

History
36 lines (31 loc) · 1.96 KB

README.md

File metadata and controls

36 lines (31 loc) · 1.96 KB

Darwin (Beta)

Implementation of the NEAT Genetic Algorithm in Rust.

As of 11th August 2020, the Algorithm is complete, tested and usable. I will try and perform optimizations wherever I can.

What is NEAT?

NEAT stands for NeuroEvolution of Augmenting Topologies. It is a Genetic Algorithm that evolves TWEANNs (Topology and Weight Evolving Artificial Neural Networks). This algorithm is a bit different from other Neural Network evolving Genetic Algorithms because here, the Topology of the ANNs is also evolved instead of just the weights.
NEAT derives its inspiration from real world genetics. In genetics, two genotypes cannot cross-over unless their constituent genes have a certain degree of similarity. NEAT reproduces this logic by having a mechanism that keeps track of the history of Innovation (or evolution) over time so we can have a measure of how similar two members of the population (here, Neural Networks) are and also what similarities they share. This allows us to effectively perform crossover between two Neural Networks no matter what the topology is. Additionally, the similarity measure also allows us to perform speciation, so we can group up similar neural networks and have them compete within their own niche. More Info can be gleaned by reading the original paper. (Link is down below)

Basic Usage Example

For a usage example, look at tests/xor.rs.

TODO

  • Minor Optimizations
  • Documentation
  • Genome Serialization for later use

Useful/Interesting Videos Showcasing NEAT

Reference

K. Stanley, R. Miikkulainen (2002) 'Evolving Neural Networks through Augmenting Topologies'