Genetic programming is an area of research in computer science directed towards finding ``optimal'' solutions in a large search space [Gol89]. The method is based on what happens during evolution in the natural world. Natural evolution proceeds because certain members of a species are better fitted for the environment and survive better. With a better survival rate they are more likely to reproduce and pass on positive genes to their offspring. This Darwinistic survival of the fittest improves the gene pool and results in creatures closer to the ``optimum'' for their environment.
The general idea of genetic algorithms is that there exists a ``genome'' - the analog of DNA - which can be interpreted as a possible solution to the problem under investigation. It could represent a formula, algorithm, or program. In ``traditional'' genetic programming, the problem being studied has a fitness function which acts as nature's grim reaper. The fitness function gives a measure of how well the genome performs. The typical genetic programming run consists of the following steps:
This summer project applied techniques from genetic programming to create a toolkit for exploring problems which don't have a natural fitness function and need human intuition to select the ``best of the breed.'' Examples include images, fractals, music, three dimensional objects, and many others.