In this chapter, we'll look at simulated evolution as a way to solve computational problems. The genetic algorithm, developed by John Holland [Holland 1962], is a search algorithm that operates over a population of encoded candidate solutions to solve a given problem. To illustrate the use of the algorithm, we'll use evolutionary computation to evolve sequences of instructions that represent a simple algorithm. This is otherwise known as genetic programming as defined by John Koza [Koza 1992].
The genetic algorithm is an optimization technique that simulates the phenomenon of natural evolution (as first observed by Charles Darwin). In natural evolution, species search for increasingly beneficial adaptations for survival within their complex environments. The search takes place in the species' chromosomes where changes, and their effects, are graded by the survival and reproduction of the species. This is the basis for survival of the fittest ”survival and the passing on of these characteristics to future generations. Survival in nature is the ultimate utility function.