ECF 1.5
SymbRegEvalOp.cpp
1#include <cmath>
2#include <ecf/ECF.h>
3#include "SymbRegEvalOp.h"
4
5
6// called only once, before the evolution – generates training data
7bool SymbRegEvalOp::initialize(StateP state)
8{
9
10 state->getGenerationNo();
11
12 nSamples = 20;
13 T = 0.1;
14 double v_0 = 3.0;
15 double t = 0;
16 double h_0 = 0;
17 for(uint i = 0; i < nSamples; i++) {
18 time.push_back(t);
19 height.push_back(0.5 * 9.81 * t * t + v_0 * t + h_0);
20 t += T;
21 }
22 return true;
23}
24
25
26FitnessP SymbRegEvalOp::evaluate(IndividualP individual)
27{
28/*
29 static int nesto = 0;
30 MOFitnessP mofit (new MOFitness);
31 mofit->push_back((FitnessP) new FitnessMax);
32 mofit->back()->setValue(0);
33 mofit->push_back((FitnessP) new FitnessMin);
34 mofit->back()->setValue(2 + nesto);
35 nesto++;
36 return mofit;
37*/
38
39 // we try to minimize the function value, so we use FitnessMin fitness (for minimization problems)
40 FitnessP fitness (new FitnessMin);
41
42 // get the genotype we defined in the configuration file
43 Tree::Tree* tree = (Tree::Tree*) individual->getGenotype().get();
44 // (you can also use boost smart pointers:)
45 //TreeP tree = boost::static_pointer_cast<Tree::Tree> (individual->getGenotype());
46
47 double error = 0, value = 0;
48 double result1, result2;
49
50 // execute once for the first time step
51 tree->setTerminalValue("t", &time[0]);
52 tree->execute(&result1);
53
54 for(uint i = 1; i < nSamples; i++) {
55 //tree->setTerminalValue("h", &value);
56
57 double valueEuler = value + T * result1;
58
59 // get the y value of the current tree
60 tree->setTerminalValue("t", &time[i]);
61 tree->execute(&result2);
62
63 // integrate (trapezoid scheme)
64 value += 0.5 * T * (result1 + result2);
65
66 // update results
67 result1 = result2;
68
69 // add the difference
70 error += fabs(height[i] - value);
71 }
72 fitness->setValue(error);
73
74 return fitness;
75}
Fitness for minimization problems.
Definition: FitnessMin.h:12
FitnessP evaluate(IndividualP individual)
Evaluate a single individual. Method must create and return a Fitness object.
bool initialize(StateP)
Initialize the evaluator. Called before first evaluation occurs.
Tree class - implements genotype as a tree.
Definition: Tree_c.h:29
void setTerminalValue(std::string, void *)
Set a terminal's value.
Definition: Tree.cpp:504
void execute(void *)
Execute current tree.
Definition: Tree.cpp:362