CS81 Lab3: Evolving robot controllers with NEAT

Due by noon next Thursday

In this lab you will experiment with an evolutionary computation method called NEAT (Neuro Evolution of Augmenting Topologies) developed by Kenneth O. Stanley. NEAT operates on both the weights and the structure of the neural network, allowing connections and nodes to be added as potential mutations. We will be using a python package that implements NEAT.

You may work with a partner on this lab.

Getting started
Evolving networks that solve XOR
In Lab1 we used the back propagation algorithm to learn the weights of a fixed architecture neural neural network to solve XOR. In this lab we will use NEAT to evolve both the weights and the architecture of a neural network to solve XOR.
Evolving networks that control robots
The NEAT paper we discussed this week involved a very time consuming fitness test intended to create a co-evolutionary arms race. We will experiment with a simpler scenario in this lab. Rather than a robot duel, we will focus on a single robot foraging for food. We will place the robot in a large room with 10 randomly located lights, representing food, and allow it to explore for 200 steps. We will test the robot with three different random placements of the food. The initial network will begin with two input units representing the light sensor values and two output units representing the motor speeds of the left and right wheels of a simulated Pioneer robot. The fitness value will be based on the number of lights consumed by the robot.
Evolving solutions to your own robot task
We will be using NEAT for our midterm project. Start brainstorming about what task you'd like to work on. Store your ideas in the directory cs81/labs/3/midterm/. If you will need a new simulator world create it here. Create a file called midterm-proposal where you describe your proposed task and provide a detailed explanation of the fitness function you would use.
Finishing up