The genetic programming algorithm draws on population genetics (including inheritance and gene frequencies) and evolution at the population level, as well as Mendelian understanding of structure (such as chromosomes , genes, alleles) and mechanisms (such as recombination and mutation). This is the so-called new or modern synthesis of evolutionary biology.
Individuals in a population contribute their genetic material (called the genotype) proportional to the relevance of their expressed genome (called their phenotype) to their environment. The next generation is created by a mating process that involves genetic operators such as recombining the genomes of two individuals in the population and introducing random copy errors (called mutations). This iterative process can lead to improved adaptation between the phenotypes of individuals in a population and the environment.
Genetic programming can be developed and used in a secondary adaptive process, where an assessment of candidates at the end of this secondary adaptive process is used for differential reproductive success in the first evolutionary process. This system can be understood as the interdependencies experienced in evolutionary development where evolution operates on an embryo which in turn develops into an individual in an environment that can eventually reproduce.
The goal of the genetic programming algorithm is to use induction to design a computer program. This is achieved by using scalable operators on candidate programs with a tree structure to improve the fit between the population of candidate programs and an objective function. The evaluation of a candidate solution involves its execution.
The genetic program uses symbolic LISP-like expressions called S-expressions which represent the graph of a program with function nodes and terminal nodes. While the algorithm is running, the programs are treated as data and when they are evaluated, they are executed. The crossing of a graph program is always depth first, and functions should always return a value.
The genetic programming algorithm was designed for inductive automatic programming and is well suited to the regression symbolic, controller design, and machine learning tasks under the broader name of function approximation.
The evaluation (allocation of fitness) of a candidate solution usually takes into account the structure of the program, rewarding parsimony.
The selection process must be balanced between random selection and greedy selection to bias the research towards finer candidate solutions (exploitation), while promoting useful diversity in the population (exploration).
A program can respond to zero or more input values and can produce one or more outputs.
All functions used in the function node set should return a usable result. For example, the division function should return a sensitive value (such as zero or one) when a division by zero occurs.