An introduction to my NEAT implemention in Golang
I have been interested in AI for a while, and while there are lots of different types of networks and algorithms out there, there is one in particular that I would like to re-create.
The algorithm is called NeuroEvolution of Augmenting Topologies, or NEAT for short.
NEAT is a genetic algorithm that evolves neural networks in a similar way that humans evolve. It works by changing the parameters and structure of networks to hopefully improve them over time by random chance.
NEAT was originally created by Kenneth Stanley.
See the original paper for a deeper view into the algorithm.
This series will be broken down into multiple, and I will update this post with links as I create them.
- Creating useful utility functions for use later on
- Creating a feed-forward neural network
- Creating a genome
- Creating a population
- Population speciation
- Kill off the worst genomes in each species
- Fitness sharing
- Kill off species that aren’t improving
- Kill off species that won’t be able to reproduce
- Species reproduction
- Fill the available space in the population with offspring
- Offspring mutation - add connection
- Offspring mutation - remove connection
- Offspring mutation - add node
- Offspring mutation - remove node
- Offspring mutation - connection weight