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; //set the misfit vector
00063         SetSynthData()(index) = measured;
00064         return currvalue;
00065 
00066       }
00067 
00068   /* For later implementation
00069    *
00070    * virtual GeneralObjective::GetGradient()
00071    {
00072    }
00073 
00074    virtual GeneralObjective::GetPartialDerivatives()
00075    {
00076    }*/
00077   }

Generated on Tue May 4 16:52:14 2010 for GPLIB++ by  doxygen 1.5.8