CGP was originally developed by Julian Miller and Peter Thomson for the purpose of evolving digital circuits. It represents a program as a directed graph (that for feed-forward functions is acyclic). The benefit of this type of representation is that it allows the implicit re-use of nodes, as a node can be connected to the output of any previous node in the graph, thereby allowing the repeated re-use of sub-graphs. This is an advantage over tree-based GP representations where identical sub-trees have to be constructed independently. The CGP technique shares some similarities with Riccardo Poli's Parallel Distributed GP, as the techniques were independently developed at the same time. Originally, CGP used a program topology defined by a rectangular grid of nodes with a user defined number of rows and columns. However, later work by Tina Yu and Julian Miller showed that it was more effective when the number of rows is chosen to be one.
In CGP, the genotype is a fixed length representation consisting of a list of integers which encode the function and connections of each node in the directed graph. However, CGP uses a genotype-phenotype mapping that does not require all of the nodes to be connected to each other, this results in the program (phenotype) being bounded but having variable length. Thus there may be genes that are entirely inactive, having no influence on the phenotype, and hence the fitness. Such inactive genes therefore have a neutral effect on genotype fitness. This phenomenon is often referred to as neutrality. The influence of neutrality in CGP has been investigated in detail by Julian Miller, Vesselin Vassilev, and Tina Yu, and has been shown to be extremely beneficial to the efficiency of evolutionary process on a range of test problems.
The following extensions to CGP have been developed by members of the Intelligent Systems Group:
CGP and the extensions to CGP have also been applied to a number of applications within the Intelligent Systems Group.