Page 73 - 49A Field Guide to Genetic Programming
P. 73
6.4 Strongly Typed Autoconstructive GP with PushGP 59
ing from developmental processes often have some regularity, which other
methods obtain through the use of ADFs, constraints, types, etc. A dis-
advantage is that, with cellular encoding, individuals require an additional
genotype-to-phenotype decoding step. However, when the fitness function
involves complex calculations with many fitness cases, the relative cost of the
decoding step is often small compared with the rest of the fitness function.
6.4 Strongly Typed Autoconstructive GP
with PushGP
While types are often used to constrain evolution, Spector’s PushGP (Klein
and Spector, 2007; Robinson and Spector, 2002; Spector, 2001; Spector,
Klein, and Keijzer, 2005a) is a move away from constraining evolution.
Essentially PushGP uses genetic programming to automatically create
programs written in the Push programming language. Push is a strongly
typed tree based language which does not enforce syntactic constraints.
Each of Push’s types has its own stack. In addition to stacks for inte-
gers, floats, Booleans and so on, there is a stack for objects of type program.
Using this code stack, Push naturally supports both recursion and program
modules (see Section 6.1.1) without human pre-specification. The code stack
allows an evolved program to push itself or fragments of itself onto the stack
for subsequent manipulation.
PushGP can use the code stack and other operations to allow programs to
construct their own crossover and other genetic operations and create their
own offspring. Programs are prevented from simply duplicating themselves
to deflect catastrophic loss of population diversity.