Autosimplification is a method for automatically simplifying a Push program invented by @lspector. For it to work, you need to be able to test a program deterministically on a a set of test cases, resulting in an error vector.
To autosimplify a program, you loop a large number of times (50 to 10000 have been used) over the following: remove a small number (currently 1 or 2) of points (instructions or code blocks) from the program, or remove a parentheses pair. If the resulting program produces the exact same error vector as the original, keep it; otherwise, revert to the previous program. You’ll notice that this is a hill-climbing algorithm that cannot backtrack.
So far, no one has implemented autosimplification using Plush genomes instead of Push programs, but there is no reason to think it wouldn’t work similarly.
With the advent of Plush genomes, we have not used autosimplification as a genetic operator, since it works on Push programs and not Plush genomes. In the past we have used it as a genetic operator, with no evidence of improving problem solving performance and some evidence of evolving smaller programs. See Frode’s student workshop paper for details.
There is evidence (see @thelmuth’s dissertation) that simplified programs are significantly more likely to generalize than unsimplified programs. I.e., it is not uncommon for an evolved program to be successful on all the training cases, but fail one or more of the test cases that weren’t seen during the training. The simplified version, however, is often less likely to fail these unseen test cases, presumably because some weird edge stuff gets removed that didn’t interfere on the (limited) training set, but would cause trouble on some larger or more complicated test case. @thelmuth plans on working on this over the summer 2016.