GeneralObjective.cpp
Go to the documentation of this file.00001 #include "GeneralObjective.h"
00002 #include <numeric>
00003 #include <cmath>
00004
00005 namespace gplib
00006 {
00007 GeneralObjective::GeneralObjective() :
00008 FitExponent(2), RMS(0.0), ParallelId("single")
00009 {
00010 }
00011
00012 GeneralObjective::~GeneralObjective()
00013 {
00014 }
00015
00016 GeneralObjective::GeneralObjective(const GeneralObjective &Old) :
00017 FitExponent(Old.FitExponent), RMS(Old.RMS), Misfit(Old.Misfit),
00018 SynthData(Old.SynthData), ParallelId(Old.ParallelId)
00019 {
00020 }
00021
00022 GeneralObjective &GeneralObjective::operator=(
00023 const GeneralObjective &source)
00024 {
00025 if (this != &source)
00026 {
00027 FitExponent = source.FitExponent;
00028 RMS = source.RMS;
00029 Misfit = source.Misfit;
00030 SynthData = source.SynthData;
00031 ParallelId = source.ParallelId;
00032 }
00033 return *this;
00034 }
00035
00036 void GeneralObjective::PreParallel(const ttranscribed &member)
00037 {
00038
00039 }
00040
00041 void GeneralObjective::SafeParallel(const ttranscribed &member)
00042 {
00043
00044 }
00045
00046 double GeneralObjective::CalcPerformance(const ttranscribed &member)
00047 {
00048 PreParallel(member);
00049 SafeParallel(member);
00050 return PostParallel(member);
00051 }
00052
00053 double GeneralObjective::CalcMisfit(const double measured,
00054 const double predicted, const double measerror,
00055 const double errorlevel, const int index)
00056 {
00057 const double absolutemin = 1e-6;
00058 double currvalue = std::abs(measured - predicted);
00059 double absoluteerror = std::max(measerror, std::abs(measured * errorlevel));
00060 currvalue /= std::max(absolutemin, absoluteerror);
00061 currvalue = std::pow(currvalue, GetFitExponent());
00062 SetMisfit()(index) = currvalue;
00063 SetSynthData()(index) = measured;
00064 return currvalue;
00065
00066 }
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 }