• Main Page
  • Modules
  • Classes
  • Files
  • File List

D:/Projekt/ECF_trunk/examples/GPSymbReg/SymbRegEvalOp.cpp

00001 #include <cmath>
00002 #include <ecf/ECF.h>
00003 #include "SymbRegEvalOp.h"
00004 
00005 
00006 // called only once, before the evolution – generates training data
00007 bool SymbRegEvalOp::initialize(StateP state)
00008 {
00009     nSamples = 10;
00010     double x = -10;
00011     for(uint i = 0; i < nSamples; i++) {
00012         domain.push_back(x);
00013         codomain.push_back(x + sin(x));
00014         x += 2;
00015     }
00016     return true;
00017 }
00018 
00019 
00020 FitnessP SymbRegEvalOp::evaluate(IndividualP individual)
00021 {
00022     // we try to minimize the function value, so we use FitnessMin fitness (for minimization problems)
00023     FitnessP fitness (new FitnessMin);
00024 
00025     // get the genotype we defined in the configuration file
00026     Tree::Tree* tree = (Tree::Tree*) individual->getGenotype().get();
00027     // (you can also use boost smart pointers:)
00028     //TreeP tree = boost::static_pointer_cast<Tree::Tree> (individual->getGenotype());
00029 
00030     double value = 0;
00031     for(uint i = 0; i < nSamples; i++) {
00032         // for each test data instance, the x value (domain) must be set
00033         tree->setTerminalValue("X", &domain[i]);
00034         // get the y value of the current tree
00035         double result;
00036         tree->execute(&result);
00037         // add the difference
00038         value += fabs(codomain[i] - result);
00039     }
00040     fitness->setValue(value);
00041 
00042     return fitness;
00043 }

Generated on Tue Nov 4 2014 13:04:32 for ECF by  doxygen 1.7.1