> ./intro

download source code
visit project website

> ./stats
Status: Completed May/2014
Languages: Python
Software: Pygame
Hardware: n/a

> ./documentation
For our Software Design final project, we wrote a simulation program that would allow you to draw a track, then generate cars that would eventually learn how to drive around said track. Here's the slide deck we used for our final presentation:

The most important slide out of that presentation is this one:

We generate 15 cars that start with random constants that relate their wheels relative to the car's distance from the wall. As the the cars progress through the generations, the best constants are selected for via our parameters (i.e how fast the car makes it around the track) and the best two survive and act like "parents". Like in natural evolution, the two parent matrices are randomly combined and mutated to form the next generation of the next 15 matrices. This method of combination and mutation ensures that each generation builds from the previous, hopefully in the direction of improvement.

This was my first shot at programming in a team environment, and I had learned a bunch about Github and merge conflicts thanks to this. My main contribution to this project was detecting the correct distance of the wall from each car, and the UI elements on the right side of the screen. The UI of the program also went through some drastic changes:

In the end, we got a working program that could successfully generate a car that would somehow figure its way around a track completely autonomously. Looking back on it now, there are so many places where we could've improved the code. Scene loading is really lousy, and we should have created a different way to generate the walls of the track since it errors quite easily as it is now. However, for one of the first ever projects I've done at Olin, I'm still pretty darn proud of it. :)