ECF 1.7
SymbRegEvalOp.cpp
1#include <cmath>
2#include "ECF/ECF.h"
3#include "SymbRegEvalOp.h"
4#include <sstream>
5#include <fstream>
6
7#include "CGP/Cartesian.h"
8#include "CGP/Cartesian_c.h"
9
10
11// called only once, before the evolution - generates training data
13{
14 nSamples_ = 10;
15 inputs_.resize(nSamples_);
16 x1.clear(); x2.clear(); x3.clear();
17 y1.clear(); y2.clear(); y3.clear();
18
19 for(uint i = 0; i < nSamples_; i++) {
20 x1.push_back(i + 1);
21 x2.push_back(i + 5);
22 x3.push_back(nSamples_ - i);
23
24 inputs_[i].resize(3);
25 inputs_[i][0] = x1[i];
26 inputs_[i][1] = x2[i];
27 inputs_[i][2] = x3[i];
28
29 y1.push_back(x1[i] + x2[i]*x1[i] - x3[i]);
30 y2.push_back(x1[i] * x3[i]);
31 y3.push_back(x1[i] - x2[i] + sin(x3[i]));
32 }
33 for(uint i = 0; i < x1.size(); ++i) {
34 std::cout << "X1: " << x1[i] << " X2: " << x2[i] << " X3: " << x3[i] << std::endl;
35 }
36 for(uint i = 0; i < y1.size(); ++i) {
37 std::cout << "Y1: " << y1[i] << " Y2: " << y2[i] << " Y3: " << y3[i] << std::endl;
38 }
39
40 return true;
41}
42
43
44FitnessP CGPSymbRegEvalOp::evaluate(IndividualP individual)
45{
46 FitnessP fitness (new FitnessMin);
47 Cartesian::Cartesian* cartesian = (Cartesian::Cartesian*) individual->getGenotype().get();
48
49 double currentFitness = 0;
50 std::vector<double> result;
51
52 for(uint i = 0; i < nSamples_; i++) {
53 cartesian->evaluate(inputs_[i], result);
54
55 currentFitness += fabs(result[0] - y1[i]);
56 currentFitness += fabs(result[1] - y2[i]);
57 //currentFitness += fabs(result[2] - y3[i]);
58 }
59
60 fitness->setValue(currentFitness);
61 return fitness;
62}
bool initialize(StateP)
Initialize the evaluator. Called before first evaluation occurs.
FitnessP evaluate(IndividualP individual)
Evaluate a single individual. Method must create and return a Fitness object.
void evaluate(std::vector< double > &inputData, std::vector< double > &results)
Fitness for minimization problems.
Definition FitnessMin.h:12