Inspiration

Retrieved from the MIT Press Journals Evolving Neural Networks Through Augmenting Topologies

What it does

It is our own implementation of the Neural Evolution algorithm described in the paper linked above.

Currently, the visualization is working, but the evolution algorithm is still unfinished, and doesn't yet output optimized networks. The visualization does correctly show the different weights between the nodes and their activation given different inputs.

The evolutional algorithm, as described in the NEAT algorithm, is supposed to mimic real life evolution through identifying species through similar topologies, and crossbreeding between species. The different networks are then evaluated and the highest preforming ones and chosen and allowed to propagate with random mutations to create the next generation.

The AI system starts by generating simple networks where every input node is connected to every output node. Then through the previously mentions systems of mutations and crossovers the network and topology is expanded allowing for more complicated outputs. Then each one of the 150 genomes are scored by a fitness function to determine how well watch one can complete the task. These processes are then repeated until a cretin level of success is achieved.

The visualizer works by first getting the structure from the genome of the neural network, and then attaching each node to each of its connected nodes by a spring, and simulating the forces applied to lay out the nodes while minimizing whitespace and being aesthetically pleasing.

How we built it

The neural network was built completely from scratch, and the visualizer was built with egui and bevy as a graphics backend. They were both made in the Rust programming language.

Challenges we ran into

Making a neural network with a dynamic topology was more difficult than we expected, and it added a ton of complexity to not only the evolution algorithm, but the visualizer as well. Although we managed to get the visualizer working in the end, even after our best efforts, the evolution algorithm was not able to optimize the networks, though it did output valid networks, which you can see the result of in the video.

Making the Neural network with a static topology would have been much simpler, for both the evolution algorithm and the visualization.

Examples of the complexities this introduced was the complicated method we had to implement the visualizer with, and making sure that all the graphs output from the evolution algorithm were valid. So, the graph cannot have cycles or have useless nodes, which was difficult to implement properly.

Accomplishments that we're proud of

Although our ambitions were higher starting the project, we were unsure if we would even have anything to show at the end of this. This was a really fun and educational challenge that we will definitely come back to and finish sometime in the future.

What we learned

We learned a lot about neural networks and graph data structures, because obviously, making your own implementation of a neural network is a good way to learn how it works.

What's next for neuroevolution of augmenting topologies (NEAT)

We will come back to this project in the future and get the evolution algorithm to work properly, and complete the visualizer. At the beginning of the project we intended the algorithm to play flappy bird or something but as we were never able to properly train it, that never came to fruition.

Built With

Share this project:

Updates

Submission history