-
Notifications
You must be signed in to change notification settings - Fork 7
/
StatsCalcOp.cpp
73 lines (62 loc) · 3.09 KB
/
StatsCalcOp.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/***************************************************************************
* (c) 2008-2011 Aleksandar Topuzović *
* <[email protected]>, <[email protected]> *
***************************************************************************/
#include <beagle/GP.hpp>
#include <beagle/macros.hpp>
#include <cmath>
#include "StatsCalcOp.hpp"
#include "Fitness.hpp"
using namespace trading;
StatsCalcOp::StatsCalcOp(Beagle::string inName) :
Beagle::GP::StatsCalcFitnessSimpleOp(inName)
{ }
void StatsCalcOp::calculateStatsDeme(Beagle::Stats& outStats,
Beagle::Deme& ioDeme,
Beagle::Context& ioContext) const
{
Beagle::GP::StatsCalcFitnessSimpleOp::calculateStatsDeme(outStats, ioDeme, ioContext); // Call base class method
const Beagle::GP::Deme& lGPDeme = Beagle::castObjectT<const Beagle::GP::Deme&>(ioDeme);
if(ioDeme.size() == 0) {
outStats.setGenerationValues(Beagle::string("deme")+Beagle::uint2str(ioContext.getDemeIndex()+1), ioContext.getGeneration(), 0, true);
outStats.resize(4);
outStats.back().mId = "fitness2";
outStats.back().mAvg = 0.0;
outStats.back().mStd = 0.0;
outStats.back().mMax = 0.0;
outStats.back().mMin = 0.0;
return;
}
const trading::Fitness::Handle lFirstIndivFitness = Beagle::castHandleT<trading::Fitness>(ioDeme[0]->getFitness());
if(ioDeme.size() == 1) {
outStats.setGenerationValues(Beagle::string("deme")+Beagle::uint2str(ioContext.getDemeIndex()+1), ioContext.getGeneration(), 1, true);
outStats.resize(4);
outStats.back().mId = "fitness2";
outStats.back().mAvg = lFirstIndivFitness->getValidationSetValue();
outStats.back().mStd = 0.0;
outStats.back().mMax = lFirstIndivFitness->getValidationSetValue();
outStats.back().mMin = lFirstIndivFitness->getValidationSetValue();
return;
}
double lSum = (double)lFirstIndivFitness->getValidationSetValue();
double lPow2Sum = Beagle::pow2Of<double>((double)lFirstIndivFitness->getValidationSetValue());
double lMax = lFirstIndivFitness->getValidationSetValue();
double lMin = lFirstIndivFitness->getValidationSetValue();
for(unsigned int i=1; i<lGPDeme.size(); i++) {
const trading::Fitness::Handle lIndivFitness = Beagle::castHandleT<trading::Fitness>(lGPDeme[i]->getFitness());
lSum += (double)lIndivFitness->getValidationSetValue();
lPow2Sum += Beagle::pow2Of<double>((double)lIndivFitness->getValidationSetValue());
lMax = Beagle::maxOf<double>(lMax, (double)lIndivFitness->getValidationSetValue());
lMin = Beagle::minOf<double>(lMin, (double)lIndivFitness->getValidationSetValue());
}
double lAverage = lSum / ioDeme.size();
double lStdError = (lPow2Sum - (Beagle::pow2Of<double>(lSum)/ioDeme.size())) / (ioDeme.size()-1);
lStdError = sqrt(lStdError);
outStats.setGenerationValues(Beagle::string("deme")+Beagle::uint2str(ioContext.getDemeIndex()+1), ioContext.getGeneration(), ioDeme.size(), true);
outStats.resize(4);
outStats.back().mId = "fitness2";
outStats.back().mAvg = lAverage;
outStats.back().mStd = lStdError;
outStats.back().mMax = lMax;
outStats.back().mMin = lMin;
}