Effective simplification of evolved push programs using a simple, stochastic hill-climber

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.