RobGP is a genetic programming system written from the ground up in C++. It's primary goals are efficiency, ease of use, and extensibility. It's distinguishing feature is that it has a modified version of Koza's architecture altering operations.
There are many genetic programming systems out there, and perhaps RobGP is not the one best suited to your needs. There were several motivations for RobGP which drove the style and implementation of the system. RobGP aims to satisfy several important goals.
- RobGP is fast! Inspired by lil-gp, RobGP uses several techniques to improve performance.
- RobGP is minimal. RobGP does not automatically output the population fitness for example, or decide when to quit evolving. It only does all of the background work for evolving genetic programs and lets the programmer decide exactly how he or she would like those programs displayed or used.
- RobGP is non-intrusive. Unlike other genetic programming systems which take control of your program execution, RobGP is controlled by your program. This makes it more ideally suited for integration within other systems as the GP does not have to have control of its execution thread.
- RobGP is customizable. By taking advantage of object orientation and respecting the UNIX philosophy of using minimal building blocks, it is very easy to modify and extend the GP with custom program output or various execution plans.
- RobGP is the first publicly available GP system to support architecture altering operations. Koza describes architecture altering operations in his third book on Genetic Programming as a way of not having to define the architecture of your programs in advance. Most GP systems do not support these operations as they do not easily integrate with the standard crossover operations.
RobGP was written as part of an independent research course concerning the use of architecture altering operations in a GP system. It is written in C++ making extensive use of object orientation to allow for easy modification and addition of components and features. Despite using object oriented techniques for easy extensibility it still takes advantage of compact structures for efficient operation. Program trees are stored in a vector in pre-order to ensure that entire programs are saved in contiguous memory without the need for fragments of memory allocated everywhere. It was written in the space of a couple months but has been heavily extended since then for use in several theses and papers. It is currently licensed as GPL but I may relicense it as LGPL to allow for commercial use in the future.