Directed Programming is a new generative programming technique developed by Christophe McKeon which is a generalisation of Grammatical Evolution allowing one not only to do GE, but also to do Genetic Programming in pure Ruby without explicitly generating a program string as output. DP even allows you to set up hybrids of GP and GE where part of a GE subtree is calculated using normal Ruby functions/operators/etc. via. GP. DRP is the first ever implementation of DP and is written in pure Ruby.

DRP however manages to dispense with two problems which affects these two systems, at least in their canonical forms. It cirumvents the so called closure problem of GP simply by stepping over it, a property which it neatly inherits from GE. It also avoids the aborted run problem of GE by having a maximum allowed recursive depth for each expression in a production rule. DRP also allows for a kind of meta-evolution in which rules can be evolved right out of the grammar, or take on a more or less significant a role. It accomplishes this by weighting the right hand sides of rules, as well as limiting the maximum recursive depth of a given rule, which can be evolved right down to zero.

GE and DRP are especially well suited to interactive evolutionary/generative applications because they allow arbitrarily tight control over program structure and output. This is important in my view because in interactive systems the biggest bottleneck by far is the fitness function, i.e. the user, and so it is advantageous to be able to easily 'engineer' the specification so as to favour certain outcomes. There simply is not enough time for the large populations and many generations used in non-interactive systems. GE is in fact used in several such systems. And then of course Ruby itself is no hot-rod, which for interactive sytems is nowhere near as much of a problem as in strictly engineering applications.

The DRP Software is licensed under the GNU GPL

This website, and all rdoc documentation is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.

Creative Commons License