Since in canonical genetic programming all functions and terminals return and expect the same type, any exchange of subtrees between two trees will be valid. Many possible variations of recombination exist. For example, Homologous and Size Fair crossover [Langdon, 2000b] attempt to preserve tree structures and the size of exchanged subtrees. Other operators are described in [Langdon, 1998a].
Subtree crossover tends to be the dominant operator in genetic programming, while mutation operators are often used at lower rates. Subtree mutation was investigated in comparison with subtree crossover in [Luke and Spector, 1998]. Other forms of mutation include single-node mutations and various forms of code-editing to remove unnecessary code from trees. The reproduction operator copies an individual from one population into the next.
The production and selection of new individuals is carried out in a generational or steady-state algorithm. In a generational algorithm, a new population is created from parents in the current population. In a steady-state algorithm, one offspring is created and placed into the existing population, either randomly or based on fitness. The comma and plus methods for offspring and parent selection used in evolutionary strategies are also possible, see Section 2.2. Other examples of offspring production force children to compete amongst themselves, such as brood selection [Altenberg, 1994,Tackett, 1994], or use methods based on similarity to bias toward similar or dissimilar parents, such as disassortative mating [Ryan, 1994].