Genetic programming

Termination of the evolution usually occurs when some individual program reaches a predefined proficiency or fitness level.

It may and often does happen that a particular run of the algorithm results in premature convergence to some local maximum which is not a globally optimal or even good solution.

[1] There was a gap of 25 years before the publication of John Holland's 'Adaptation in Natural and Artificial Systems' laid out the theoretical and empirical foundations of the science.

In 1981, Richard Forsyth demonstrated the successful evolution of small programs, represented as trees, to perform classification of crime scene evidence for the UK Home Office.

[2] Although the idea of evolving programs, initially in the computer language Lisp, was current amongst John Holland's students,[3] it was not until they organised the first Genetic Algorithms (GA) conference in Pittsburgh that Nichael Cramer[4] published evolved programs in two specially designed languages, which included the first statement of modern "tree-based" Genetic Programming (that is, procedural languages organized in tree-based structures and operated on by suitably defined GA-operators).

[6] Koza followed this with 205 publications on “Genetic Programming” (GP), name coined by David Goldberg, also a PhD student of John Holland.

Subsequently, there was an enormous expansion of the number of publications with the Genetic Programming Bibliography, surpassing 10,000 entries.

[15] Early work that set the stage for current genetic programming research topics and applications is diverse, and includes software synthesis and repair, predictive modeling, data mining,[30] financial modeling,[31] soft sensors,[32] design,[33] and image processing.

[34] Applications in some areas, such as design, often make use of intermediate representations,[35] such as Fred Gruau's cellular encoding.

Non-tree representations have been suggested and successfully implemented, such as linear genetic programming which perhaps suits the more traditional imperative languages.

[41][42] The commercial GP software Discipulus uses automatic induction of binary machine code ("AIM")[43] to achieve better performance.

μGP[44] uses directed multigraphs to generate programs that fully exploit the syntax of a given assembly language.

Some individuals selected according to fitness criteria do not participate in crossover, but are copied into the next generation, akin to asexual reproduction in the natural world.

Whereas subtree mutation (in the animation) may, depending upon the function and terminal sets, have a bias to either increase or decrease the tree size.

Some of the applications of GP are curve fitting, data modeling, symbolic regression, feature selection, classification, etc.

[54] Since 2004, the annual Genetic and Evolutionary Computation Conference (GECCO) holds Human Competitive Awards (called Humies) competition,[55] where cash awards are presented to human-competitive results produced by any form of genetic and evolutionary computation.

It suggests that chromosomes, crossover, and mutation were themselves evolved, therefore like their real life counterparts should be allowed to change on their own rather than being determined by a human programmer.

A function represented as a tree structure
Genetic programming subtree crossover
Animation of creating genetic programing child by mutating parent removing subtree and replacing with random code