Evoptool: Evolutionary Optimization Tool

From AIRWiki
Revision as of 20:36, 21 October 2011 by LuigiMalago (Talk | contribs) (Description)

Jump to: navigation, search

Evoptool Team

  • Cucci Davide - cucci [AT] elet.polimi.it

Formerly involved

  • Emanuele Corsano

Mailing List

http://groups.google.com/group/evoptool

Download

svn checkout https://svn.ws.dei.polimi.it/evoptool/

Installation

Follow these steps in order to compile evoptool

1. Download source code from svn https://svn.ws.dei.polimi.it/evoptool/

 User
 Password

Refer to trunk for the lastest (instable) version of evoptool

2. First you need to manually compile the l1_logreg-0.8.2 package, http://www.stanford.edu/~boyd/l1_logreg/ whose source are already included in the evoptool repository. In order to do that follow the instrunctions in README.evoptool in the l1_logreg-0.8.2 directory

Next, compile <id_dist/code> following the instructions in <code>README.evoptool<code> in the <code><id_dist/code> folder

3. Then you need to compile a module at a time. Each module is included in a different folder. To compile a module, from go to the module source folder and do make lib. For instance, for the module named <code>common

 cd common/src
 make lib
 cd ..

Compile modules in the following order

 common
 functions
 ga
 eda
 stochastic

To clean a module, do

 make clean

from the module source directory

4. Go to core module and type

 make exe

Binary files will be copied in the bin directory in the root as well as the bin directory of the core module

Required packages

  • Libraries
  • Software
    • gnuplot

Running

Right now evoptool only runs as a script. GUI is not maintained in the latest version. The evoptool binary file is supposed to be run in the bin directory in the root, this is because right now the script looks for some configuration files, for the instances of the problems, and temp directories. If you want to run the script from other directories, you just need to copy in that directory the evoptool-file directory that you find in the bin directory. Link such directory instead of copying it is not safe if you run multiple scripts at the same time, since output files will be shared.

To run the algorithm you need to enter as input an xml file. For instance you can run

 ./evoptool evoptool-file/examples/unitTestOneMax.xml

The evoptool-file/example directory contains a set of xml files for different benchmarks and different algorithms. Take a loot at the example.xml file for the documentation on hoe to set the parameters for an each execution of evoptool

Each execution of evoptool produces a set of files as output. You can find all files in evoptool-file/temp directory. Plus a tar.gz file containing such files can be produced at the end of the execution of evoptool. See the xml file for details.

 evoptool-file/temp/data

contains the raw data of the statistics according to the xml file

 evoptool-file/temp/gnuplot

contains the gnuplot files to produce images of the statistics

 evoptool-file/temp/image

contains images of the statistics produced according to the xml file

 evoptool-file/temp/support

contains logs

Documentation

Implement a new benchmark

1) In the constructor you hou have to set

_minFitness = 0; 
_maxFitness = size; 
_knownSolution = true;

To create a new algorithm

1) Add a line in evoptool-file/exec-scripts/example.xml as a documenation for the parameters of your algorithm. Choose a new Id for your algorithm Types indicates then type of the parameters (the order is important) that will must be specified in the xml file (see <algo>) and are passed to the constructor of the algorithm when the object is instantiated I = integer D = double B = bool

2) modify the file core/src/XMLParser.cpp and insert an new entry for your algorithm in bool XMLParser::parseAlgorithms for instance

{ Evoptool::DEUM, 5, (char*) "IDDDI" } // Pop, percElitism, percSelec, CoolRate, GibbsIterations where the first argument is the class of the algorithm the second the number of paramers parsed in the xml file the third the types of each parameter

3) add a case in the switch that follows in bool XMLParser::parseAlgorithms

for instance case Evoptool::EXTENDEDFCA: algos[i] = new extendedFCA(intVal[0], doubleVal[0], doubleVal[1], intVal[1], intVal[2], params->rng); algos[i]->initAlgorithm(params->task); break;

where the algorithm is instantiated

4) Add an entry for your algorithm in core/src/Algorithms.h

5) Add an entry in Evoptool.h

 typedef enum {   
   DEUM
 } Algorithms;

6) Implement a new algorithm

All algorithm must implement intiAlgorithm, and call Algorithm::initAlgorithm same thing for Algorithm::run();

Run an algorithm in a C++ program

The simplest way to do this is to create a new submodule

1) copy the example "exampleRunAlgorithm" in a new folder (that we call myexample) in evoptool/core/src/

2) modify the Makefile see comments in the file for more details

3) edit the main() function in the source file, if you need you can create other c++ and h files in the same folder and include them according to your needs

4) from evoptool/core/src/myexample run make bin the bin file is create in evoptool/core/bin and evoptool/bin NOTICE THAT evoptool/core/bin is deleted after a make cleanall

5) from evoptool/bin run ./myexample (where myexample is the name of the bin file you specified in the Makefile)