Latest news:

Nov 11, 2009: version 0.4 released!

University of Luxembourg

Lastest stable realease: 0.4

Installation

Once you retrieved the latest release (version 0.4 - see section Download ), uncompress the archive and run the classical configure, make, make install steps (please take a look at ./configure --help for configuration options):

$ tar xvzf libgep-0.4.tar.gz
$ cd libgep-0.4
$ ./configure
$ make
$ make install

I advice you to use stow, a wonderful tool to activate/desactivate different versions for the same program compiled by autotools. You'll then typically install LibGEP as follows:

$ ./configure --prefix=/usr/local/stow/libgep-0.4
$ make
$ make install
$ cd /usr/local/stow
$ sudo stow libgep-0.4

Note: Use stow -D to disable a given release.

 

(top)

Activating Cheating in GEP process

Part of the motivation for developing this library was to analyse the impact of faults over the global GEP process. We consider here only one type of fault: falsification of tasks result.
Modelisation of the attackers for such fault-model is handled through the FT::Cheater class which is usable in LibGEP if you configure it with the cheat mode enabled:

./configure --enable-cheat-mode

 

(top)

Requirements

LibGEP was developped under Mac OS X and shall run on any GNU/Linux or BSD-like system (in particular, we tested the installation on Debian systems). It also requires: Actually, all required piece of software are checked by the 'configure' script.

 

(top)

Doxygen documentation

The reference documentation for LibGEP is generated from the source files using Doxygen.
If you want to regenerate it locally, simply configure LibGEP as follows:

./configure --with-doc

You can access this documentation using this link.

 

(top)

Library overview

LibGEP is fully templated to permit the maximum flexibility and efficiency. The design of the library is based on the GEP::Chromosome object. A GEP::Chromosome objet is used to store the tree structure and is translated into it when the calculateValue() method is invoked.

A GEP::Individual object encloses a Chromosome. The main methods used by an Individual are evaluate(param), calculateFitness() and reset(). You might refer to the respective descriptions in the header file.

A GEP::Population object stores a set of Individuals and manages them. The management includes invoking selection, recombination and mutation operators as well as updating the elite and copying it to newly created population.

Finally, a GEP::GEPAlg object is managing the Population by executing the loops of generations and loops of independent runs. The GEPAlg object stores training and testing sets (if any), records the best individuals, statistics and population contents.

 

(top)

Customization

User customization of LibGEP functionality can be performed on four levels:
  1. Function level: a basic customization, involves writing a CustomOneArg or CustomTwoArg functions, that inherit from oneArg or twoArg, respectively and implement operator() and name() functions.
  2. Individual level: a basic customization, involves writing a separate CustomIndividual class that inherits from Individual and implements evaluate(), calculateFitness() and reset() methods.
    The design of an Individual class is problem-dependent (see examples for implementation of minimum square approximation method).
  3. Population level: more advanced one as it involves writing a separate CustomPopulation class that inherits from Population and implements population generation, modification and management methods.
    The design should be reimplemented only if you want to use a specific population model (see GEP::CellPopulation and GEP::MergePopulation for instance).
  4. GEPAlg level: more advanced one, involves writing a separate CustomGEPAlg class that inherits from GEPAlg and implements global population management methods, learning set modification methods and custom statistics. It is done mostly in four functions:
    • runStart(): a preamble of an independent run
    • runEnd(): a postamble of an independent run
    • genStart(): a preamble of a generation
    • genEnd(): a postamble of a generation
A more concrete example can be found in the examples directory.