From f1b6eb5dd8c95b7f29ec36c1b6837c30a20e6df8 Mon Sep 17 00:00:00 2001 From: jeggermo Date: Thu, 28 Jun 2001 14:33:51 +0000 Subject: [PATCH] main.cc for symreg gp --- eo/app/gpsymreg/main.cc | 165 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 eo/app/gpsymreg/main.cc diff --git a/eo/app/gpsymreg/main.cc b/eo/app/gpsymreg/main.cc new file mode 100644 index 00000000..53ef6b36 --- /dev/null +++ b/eo/app/gpsymreg/main.cc @@ -0,0 +1,165 @@ +/* + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: todos@geneura.ugr.es, http://geneura.ugr.es + jeggermo@liacs.nl +*/ + +#ifdef _MSC_VER +#pragma warning(disable:4786) +#endif + +#include +#include +#include +#include + +using namespace gp_parse_tree; +using namespace std; + +//----------------------------------------------------------------------------- + +#include "node.h" +#include "parameters.h" +#include "fitness.h" + + +// TYPE DECLARATIONS FOR GP + + +typedef eoParseTree EoType; +typedef eoPop Pop; + +//----------------------------------------------------------------------------- + +int main(int argc, char *argv[]) +{ + + // the vector containing the possible nodes + vector initSequence; + + // initialise parameters + Parameters parameter(argc, argv); + + // set the randomseed + rng.reseed(parameter.randomseed); + + // Create a generation counter + eoValueParam generationCounter(0, "Gen."); + + // Create an incrementor (sub-class of eoUpdater). Note that the + // parameter's value is passed by reference, + // so every time the incrementer is updated (every generation), + // the data in generationCounter will change. + eoIncrementor increment(generationCounter.value()); + + + // create an instantiation of the fitness/evaluation function + // it initializes the initSequence vector + // the parameters are passed on as well + RegFitness eval(generationCounter, initSequence, parameter); + + // Depth Initializor, defaults to grow method. + eoGpDepthInitializer initializer(parameter.InitMaxDepth, initSequence); + + // create the initial population + Pop pop(parameter.population_size, initializer); + + // and evaluate the individuals + apply(eval, pop); + + generationCounter.value()++; // set the generationCounter to 1 + + + // define X-OVER + eoSubtreeXOver xover(parameter.MaxSize); + // define MUTATION + eoBranchMutation mutation(initializer, parameter.MaxSize); +// eoExpansionMutation mutation(initializer, parameter.MaxSize); +// eoCollapseSubtreeMutation mutation(initializer, parameter.MaxSize); +// eoPointMutation mutation(initSequence); +// eoHoistMutation mutation; + + // The operators are encapsulated into an eoTRansform object, + // that performs sequentially crossover and mutation + eoSGATransform transform(xover, parameter.xover_rate, mutation, parameter.mutation_rate); + + // The robust tournament selection + // in our case 5-tournament selection + eoDetTournamentSelect selectOne(parameter.tournamentsize); + // is now encapsulated in a eoSelectMany + eoSelectMany select(selectOne, parameter.offspring_size, eo_is_an_integer); + + // and the generational replacement + //eoGenerationalReplacement replace; + // or the SteadtState replacment + //eoSSGAWorseReplacement replace; + // or comma selection + eoCommaReplacement replace; + + // Terminators + eoGenContinue term(parameter.nGenerations); + + eoCheckPoint checkPoint(term); + + // STATISTICS + eoAverageStat avg; + eoBestFitnessStat best; + + + // Add it to the checkpoint, + // so the counter is updated (here, incremented) every generation + checkPoint.add(increment); + checkPoint.add(avg); + checkPoint.add(best); + + eoGnuplot1DMonitor gnuplotmonitor("gnuplotBestStats"); + gnuplotmonitor.add(generationCounter); + gnuplotmonitor.add(best); + // we need to add a empty string variable if we want to seed the second fitness value + eoValueParam dummy1("", "Smallest Tree Size"); + gnuplotmonitor.add(dummy1); + + eoGnuplot1DMonitor gnuplotAvgmonitor("gnuplotAvgStats"); + gnuplotAvgmonitor.add(generationCounter); + gnuplotAvgmonitor.add(avg); + // we need to add a empty string variable if we want to seed the second fitness value + eoValueParam dummy2("", "Average Tree Size"); + gnuplotAvgmonitor.add(dummy2); + + checkPoint.add(gnuplotmonitor); + checkPoint.add(gnuplotAvgmonitor); + + // GP Generation + eoEasyEA gp(checkPoint, eval, select, transform, replace); + + cout << "Initialization done" << endl; + + + try + { + gp(pop); + } + catch (exception& e) + { + cout << "exception: " << e.what() << endl;; + exit(EXIT_FAILURE); + } + + + return 1; +}; + +