Evolution as training
Evolution is a natural result of the environment that we live in. This was the conclusion of a YouTube video by David Randall Miller, who demonstrated how natural selection works by programming a world where blobs have genomes and reproduce. Evolution ends up being a natural byproduct of the world that they are in simply because those that don't survive, don't pass their genome onto future generations.
I wanted to try my hand at implementing this myself and reproducing Miller's results. This resulted in nervana-2d, which is a simple 2-dimensional implementation of blobs evolving in their habitat. Watch the video and see how they first start off running in random directions. However, as generations go on and those on the left side are killed/the right side repopulates, notice how the blobs evolve to move to the right within just ten generations. I then wanted to try this out in a physics environment, which resulted in nervana-3d: a 3-dimensional implementation with physics and collisions enabled. In this environment, only those that go to the top right corner of the cube survive. Notice the exact same results: over a few generations, the blobs evolve to moving to the safe top right corner instead of heading in random directions or staying still.
Analyzing individual networks
Since these neural networks are so small, we can attempt to analyze them using some visualization. The neural network of Nervana 2D's final sample in the video (from generation 10) is shown in Figure 1. Notably, the sum of the values inputted to Mx (at the bottom left) tend to be positive, so when they are plugged into probability . tanh . sum (the activation function for Mx), there is an increasing likelihood that the blob will move towards the right.

Figure 1: neural network sample 10.
Next steps
I would love to implement rare mutations in order to increase survivorship in changing environments. In terms of simulation logic, I would like to implement 2D collisions, killing neighbours, and pheremones. For data analysis, I want to create tools such as a streamlined neural network directed graph generator.