abstract = "The established approach in genetic programming (GP)
involves the definition of functions and terminals
appropriate to the problem at hand, after which
evolution of expressions using these definitions takes
place. We have recently developed a system, dubbed
FINCH (Fertile Darwinian Bytecode Harvester), to
evolutionarily improve actual, extant software, which
was not intentionally written for the purpose of
serving as a GP representation in particular, nor for
evolution in general. This is in contrast to existing
work that uses restricted subsets of the Java bytecode
instruction set as a representation language for
individuals in genetic programming. The ability to
evolve Java programs will hopefully lead to a valuable
new tool in the software engineer's toolkit.",
notes = "Recursion, Compatible bytecode crossover v JVM stack,
variable access sets, (possibly multiple) traversal of
data flow graph. Identical or narrow types. Control
flow. Crossover prevents verification errors (may still
get runtime error, eg exception and timeout). Section
5: BNF or other grammars not good since BNF does not
capture semantics. Temporary instrumentation used to
halt runaway programs. dead code removal. symbolic
regression quartic polynomial, Santa Fe artificial ant,
intertwined spirals, array sum, tic-tac-toe