00001 #include <cmath>
00002 #include <ecf/ECF.h>
00003 #include "SymbRegEvalOp.h"
00004
00005
00006
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
00023 FitnessP fitness (new FitnessMin);
00024
00025
00026 Tree::Tree* tree = (Tree::Tree*) individual->getGenotype().get();
00027
00028
00029
00030 double value = 0;
00031 for(uint i = 0; i < nSamples; i++) {
00032
00033 tree->setTerminalValue("X", &domain[i]);
00034
00035 double result;
00036 tree->execute(&result);
00037
00038 value += fabs(codomain[i] - result);
00039 }
00040 fitness->setValue(value);
00041
00042 return fitness;
00043 }