Code building genetic programming

In recent years the field of genetic programming has made significant advances towards automatic programming. Research and development of contemporary program synthesis methods, such as PushGP and Grammar Guided Genetic Programming, can produce programs that solve problems typically assigned in introductory academic settings. These problems focus on a narrow, predetermined set of simple data structures, basic control flow patterns, and primitive, non-overlapping data types (without, for example, inheritance or composite types). Few, if any, genetic programming methods for program synthesis have convincingly demonstrated the capability of synthesizing programs that use arbitrary data types, data structures, and specifications that are drawn from existing codebases. In this paper, we introduce Code Building Genetic Programming (CBGP) as a framework within which this can be done, by leveraging programming language features such as reflection and first-class specifications. CBGP produces a computational graph that can be executed or translated into source code of a host language. To demonstrate the novel capabilities of CBGP, we present results on new benchmarks that use non-primitive, polymorphic data types as well as some standard program synthesis benchmarks.

[1]  Maarten Keijzer,et al.  The Push3 execution stack and the evolution of control , 2005, GECCO '05.

[2]  Lee Spector,et al.  Improving generalization of evolved programs through automatic simplification , 2017, GECCO.

[3]  Michael O'Neill,et al.  Automatic programming: The open issue? , 2019, Genetic Programming and Evolvable Machines.

[4]  David Fagan,et al.  Extending Program Synthesis Grammars for Grammar-Guided Genetic Programming , 2018, PPSN.

[5]  Lee Spector,et al.  General Program Synthesis Benchmark Suite , 2015, GECCO.

[6]  Sebastian Nowozin,et al.  DeepCoder: Learning to Write Programs , 2016, ICLR.

[7]  Lee Spector,et al.  Program synthesis using uniform mutation by addition and deletion , 2018, GECCO.

[8]  David Fagan,et al.  A Grammar Design Pattern for Arbitrary Program Synthesis Problems in Genetic Programming , 2017, EuroGP.

[9]  Lee Spector,et al.  Plushi: an embeddable, language agnostic, push interpreter , 2018, GECCO.

[10]  Sumit Gulwani,et al.  Automating string processing in spreadsheets using input-output examples , 2011, POPL '11.

[11]  Pushmeet Kohli,et al.  TerpreT: A Probabilistic Programming Language for Program Induction , 2016, ArXiv.

[12]  Lee Spector,et al.  Linear Genomes for Structured Programs , 2016, GPTP.

[13]  Susumu Katayama Efficient Exhaustive Generation of Functional Programs Using Monte-Carlo Search with Iterative Deepening , 2008, PRICAI.

[14]  Michael J. Franklin,et al.  Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing , 2012, NSDI.

[15]  Lee Spector,et al.  On the difficulty of benchmarking inductive program synthesis methods , 2017, GECCO.

[16]  Riccardo Poli,et al.  A Field Guide to Genetic Programming , 2008 .

[17]  Michael O'Neill,et al.  Grammatical Evolution: Evolving Programs for an Arbitrary Language , 1998, EuroGP.