freESDiscriminativeRecombinator.txx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   F.R.E.E. - flexible registration evaluation engine
00004   Version:   v.1.0.0
00005   Date:      $Date: 2006/09/01 12:00:00 $
00006   Module:    $RCSfile: freESDominantRecombinator.txx,v $
00007   Language:  C++
00008 
00009 
00010 
00011   Copyright (c) 2007 Ralf o Floca (Department of Medical Informatics,
00012   Institute for Medical Biometry and Informatics, University of Heidelberg,
00013   Germany). All rights reserved.
00014   See FREECopyright.txt or http://www.mi.med.uni-hd.de/free/copyright.htm
00015   for details.
00016 
00017      This software is distributed WITHOUT ANY WARRANTY; without even 
00018      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00019      PURPOSE.  See the above copyright notices for more information.
00020 
00021 =========================================================================*/
00022 #ifndef _freESDiscriminativeRecombinator_txx
00023 #define _freESDiscriminativeRecombinator_txx
00024 
00025 #include "freESDiscriminativeRecombinator.h"
00026 
00027 namespace FREE
00028 {
00029   namespace ES
00030   {
00031 
00032 
00033     template <class TIndividual>
00034     DiscriminativeRecombinator<TIndividual>
00035       ::DiscriminativeRecombinator()
00036     {
00037     }
00038 
00039     template <class TIndividual>
00040     void
00041     DiscriminativeRecombinator<TIndividual>::
00042     SetObjectiveRecombinator( SubRecombinatorType * pObjectiveRecombinator )
00043     {
00044       if ( this->m_ObjectiveRecombinator != pObjectiveRecombinator )
00045       {
00046         this->m_ObjectiveRecombinator = pObjectiveRecombinator ;
00047         this->Modified() ;
00048       }
00049     };
00050 
00051     template <class TIndividual>
00052     void
00053     DiscriminativeRecombinator<TIndividual>::
00054     SetStrategicRecombinator( SubRecombinatorType * pStrategicRecombinator )
00055     {
00056       if ( this->m_StrategicRecombinator != pStrategicRecombinator )
00057       {
00058         this->m_StrategicRecombinator = pStrategicRecombinator ;
00059         this->Modified() ;
00060       }
00061     };
00062 
00063     template <class TIndividual>
00064     typename DiscriminativeRecombinator<TIndividual>::IndividualPointer
00065       DiscriminativeRecombinator<TIndividual>
00066       ::Recombine(const ParentSelectionType& parents) const
00067     {
00068       if (this->m_ObjectiveRecombinator.IsNull()) throwExceptionMacro("Error. No recombinator set for objective parameters.");
00069       if (this->m_StrategicRecombinator.IsNull()) throwExceptionMacro("Error. No recombinator set for strategic parameters.");
00070 
00071       IndividualPointer newIndividual = this->m_ObjectiveRecombinator->Recombine(parents);
00072       IndividualPointer newStrategic = this->m_StrategicRecombinator->Recombine(parents);
00073 
00074       //Copy newly combined strategic parameters into new individual
00075 
00076       for (unsigned int index = 0; index<newIndividual->StrategicParameters().size(); index++)
00077       { //strategic parameter
00078           try
00079           {
00080             typename IndividualType::StrategicParameterType::ParameterValueType newValue;
00081             newValue = ((newStrategic->StrategicParameters())[index])->GetValue();
00082             ((newIndividual->StrategicParameters())[index])->SetValue(newValue);
00083           }
00084           catchAllNPassMacro("Error while copying strategic parameter #"+Convert::ToStr(index)+".");
00085       }
00086 
00087       return newIndividual;
00088     }
00089 
00090     template <class TIndividual>
00091     typename DiscriminativeRecombinator<TIndividual>::WeightVectorType
00092     DiscriminativeRecombinator<TIndividual>
00093     ::GetWeights(const unsigned long lParentCount) const
00094     {
00095       if (this->m_ObjectiveRecombinator.IsNull()) throwExceptionMacro("Error. No recombinator set for objective parameters. Cannot return weights");
00096       return this->m_ObjectiveRecombinator->GetWeights(lParentCount);
00097     };
00098 
00099   } // end of namespace ES
00100 } // end of namespace FREE
00101 
00102 #endif

Generated at Sat Oct 13 15:53:35 2007 for f.r.e.e. - Flexible Registration and Evaluation Engine by doxygen 1.5.3 written by Dimitri van Heesch, © 1997-2000