Strongly Formed Genetic Programming 06/19/2013
Agenda Strongly formed genetic programming (SFGP) Where it fits Current progress Next steps
SFGP GP for evolving programs [Castle2012] Uses basic programming constructs to generate code for a given problem Extends previous work in Strongly Typed Genetic Programming [Montana1995] Nodes specify data-type constraints on inputs Removes need for closure No restraint on tree structure as typical grammars Data-type constraints provide structure No control structure found in imperative programming constructs
SFGP Extends STGP by imposing extra node restrictions Node must define: Data-type (integer, float, etc.) Node-type Allowable child terminals or non-terminals For example, Assignment node must have a first child that is both an integer and a variable Must be satisfied throughout evolutionary process
SFGP Extends STGP by imposing extra node restrictions Node must define: Data-type (integer, float, etc.) Node-type Allowable child terminals or non-terminals For example, Assignment node must have a first child that is an integer and a variable Must be satisfied throughout evolutionary process Assignment Integer Variable Integer Expression int var = 5;
SFGP Extends STGP by imposing extra node restrictions Node must define: Data-type (integer, float, etc.) Node-type Allowable child terminals or non-terminals For example, Assignment node must have a first child that is an integer and a variable Must be satisfied throughout evolutionary process For Loop Integer Variable Code Block Integer Expression for (int i = 0; i < 20; ++i) { Code Block } IteratorUpper Bound
SFGP Types Top-level Subroutine CodeBlock Statement Loop ForLoop ForEachLoop IfStatement Assignment Expression Add Subtract Multiply And Or Not Literal Variable
Where it Fits Tree halves One half provides role transformations One half provides code generation Using SFGP, we will generate the code for the composition strategies Advantage of SFGP is that we can output into any language Also high level representations of nodes, as we had before Initial approach had some roadblocks with post-processing for generating quality code Allow algorithm to take control
Where it Fits WRAPPER Code Generation Role Transformations
Current Progress Implementing vanilla SFGP Creating new primitives and functionality in Puppy Running into some issues At 12:30am, I realized… STGP is already a part of OpenBEAGLE proper
Next Steps Migrate to OpenBEAGLE and get sample programs up and running Customize for our needs Migrate and merge role transformations
Sample Output from Puppy Best individual at generation 50 is: (CODEBLOCK (OR (CODEBLOCK X X (VARIABLE X)) (ASSIGNMENT X (SUBROUTINE X X))) (LITERAL (LOOP (MULTIPLY X X) (ASSIGNMENT X X))) (IFSTATEMENT X (ADD X X))) =================== CODEBLOCK VARIABLE OR ASSIGNMENT SUBROUTINE CODEBLOCK MULTIPLY LOOP ASSIGNMENT LITERAL IFSTATEMENT ADD ===================
Frameworks SFGP – EpochX Java Framework OpenBEAGLE Provides STGP support (must be extended for SFGP) SPAMBASE example uses STGP Stable release (3.0.3) has a run-time error Alpha build runs properly (4.0.0 – Alpha 2)
New References [Castle2012] T. Castle and C. G. Johnson. Evolving high-level imperative program trees with strongly formed genetic programming. In Proceedings of the 15th European Conference on Genetic Programming, EuroGP 2012, volume 7244 of LNCS, pages 1–12. Springer, Apr [Montana1995] Montana, D.J.: Strongly typed genetic programming. Evolutionary Computation 3 (1995)