This program uses a genetic algorithm to design a two-dimensional car that is “optimal” for a particular terrain. The rules of the problem are as follows:

- The car must have two wheels (blue circles) and two loads (red circles).
- The initial positions and radii of these four masses can be freely chosen by the algorithm.
- The masses are connected by springs whose length, damping constant and spring constant can be freely chosen by the algorithm.
- The loads must never touch the ground.

The optimality of a particular candidate solution (the fitness function) is determined by how far it travels before *a)* a mass touches the ground or *b)* time runs out.

Note that at the beginning, the algorithm doesn’t even know that wheels belong on the bottom. It is sometimes possible to see distinct species emerge and die - for instance, “unicycles” are often quite successful in the early stages of the algorithm’s progress.

The graph shows mean and maximum fitness values as a function of generation number.

This demo inspired Boxcar2D.

The GA could converge much faster than it does here. In choosing the fitness cutoff, population size etc. I have aimed for an interesting/fun simulation rather than a fast, useful optimization.

The timeout is fixed but arbitrary. It was a quick hack to remove cars which get stuck without dropping their load. It has the side-effect of making this program extremely frustrating to watch.