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.
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
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.
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.
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.
Customization
User customization of
LibGEP functionality can be performed on four levels:
- 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.
- 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).
- 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).
- 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.