Genetic programming systems often produce programs that include unnecessary code. This is undesirable for several reasons, including the burdens that overly-large programs put on end-users for program interpretation and maintenance. The problem is exacerbated by recently developed techniques, such as genetic programming with geometric semantic crossover, that tend to produce enormous programs. Methods for automatically simplifying evolved programs are therefore of interest, but automatic simplification is non-trivial in the context of traditional program representations with unconstrained function sets. Here we show how evolved programs expressed in the stack-based Push programming language can be automatically and reliably simplified using a simple, stochastic hill-climber. We demonstrate and quantitatively characterize this simplification process on programs evolved to solve four non-trivial genetic programming problems with qualitatively different function sets.
[1]
Paulien Hogeweg,et al.
Evolutionary Consequences of Coevolving Targets
,
1997,
Evolutionary Computation.
[2]
Julian Francis Miller,et al.
The Automatic Acquisition, Evolution and Reuse of Modules in Cartesian Genetic Programming
,
2008,
IEEE Transactions on Evolutionary Computation.
[3]
Lee Spector,et al.
Word count as a traditional programming benchmark problem for genetic programming
,
2014,
GECCO.
[4]
Lee Spector,et al.
Genetic Programming and Autoconstructive Evolution with the Push Programming Language
,
2002,
Genetic Programming and Evolvable Machines.
[5]
Maarten Keijzer,et al.
The Push3 execution stack and the evolution of control
,
2005,
GECCO '05.
[6]
Krzysztof Krawiec,et al.
Geometric Semantic Genetic Programming
,
2012,
PPSN.