freESAdaptiveCovarianceMutation.txx

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: freESAdaptiveCovarianceMutation.txx,v $
00005 
00006   Date:      $Date: 2005/03/07 03:39:58 $
00007   Version:   $Revision: 1.32 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even 
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00014      PURPOSE.  See the above copyright notices for more information.
00015 
00016 =========================================================================*/
00017 #ifndef _freESAdaptiveCovarianceMutation_txx
00018 #define _freESAdaptiveCovarianceMutation_txx
00019 
00020 #include "freESAdaptiveCovarianceMutation.h"
00021 
00022 namespace FREE
00023 {
00024 namespace ES
00025 {
00026 
00027 template <class TIndividual>
00028 AdaptiveCovarianceMutation<TIndividual>
00029 ::AdaptiveCovarianceMutation()
00030 {
00031   m_StrategicMutationVariance = 1.0;
00032   m_MutateValueVariance = 1.0;
00033   m_RandomGenerator = VariateGeneratorType::New();
00034 }
00035 
00036 template <class TIndividual>
00037 void
00038 AdaptiveCovarianceMutation<TIndividual>
00039 ::RegisterStrategicIndividualParameters(IndividualType& individual) const
00040 {
00041   for (unsigned long index = 0; index<individual.ObjectiveParameters().size(); index++)
00042   {
00043     IndividualType::StrategicParameterPointer parameter = IndividualType::StrategicParameterType::New();
00044 
00045     parameter->SetValue(1.0);
00046     parameter->SetHandling(IndividualType::StrategicParameterType::HDynamic);
00047     parameter->SetOrigin(this->GetNameOfClass());
00048 
00049     individual.StrategicParameters().push_back(parameter);
00050   }
00051 };
00052 
00053 template <class TIndividual>
00054 void
00055 AdaptiveCovarianceMutation<TIndividual>
00056 ::MutateStrategicIndividualParameters(IndividualType& individual, PopulationType& population) const
00057 {
00058   if (m_StrategicMutationVariance<=0) throwExceptionMacro("Error. Strategic mutation variance should not be Zero or less. Actual value: "<<m_StrategicMutationVariance);
00059 
00060   //get all strategic values of the mutation
00061   IndividualType::StrategicParametersType::SelectedParametersType parameters =
00062     individual.StrategicParameters().GetStrategicParameters(this->GetNameOfClass());
00063 
00064   for (unsigned long index = 0; index<parameters.size(); index++)
00065   {
00066     IndividualType::StrategicParameterValueType variance = (parameters[index])->GetValue();
00067 
00068     //mutate parameter
00069     variance = variance * (exp(m_RandomGenerator->GetVariate()*m_StrategicMutationVariance));
00070     
00071     //set new value;
00072     (parameters[index])->SetValue(variance);
00073   }
00074 };
00075 
00076 template <class TIndividual>
00077 double
00078 AdaptiveCovarianceMutation<TIndividual>
00079 ::MutateValue(const double& value)
00080 {
00081     double mutatedValue = value;
00082     mutatedValue += (m_RandomGenerator->GetVariate()*m_MutateValueVariance)/m_MutateValueScale;
00083     return mutatedValue;
00084 };
00085 
00086 template <class TIndividual>
00087 void
00088 AdaptiveCovarianceMutation<TIndividual>
00089 ::MutateObjectivParameters(IndividualType* pIndividual, PopulationType* pPopulation) const
00090 {
00091   if (!pIndividual) throwExceptionMacro("Error. Passed individual is Null.");
00092 
00093   //get the strategic parameters
00094   IndividualType::StrategicParametersType::SelectedParametersType parameters =
00095     pIndividual->StrategicParameters().GetStrategicParameters(this->GetNameOfClass());
00096 
00097   if (parameters.size()!=pIndividual->ObjectiveParameters().size()) throwExceptionMacro("Error. Number of objective parameters and related strategic parameters are not equal. Ensure that strategic parameters are properly registered. Objective count:" << pIndividual->ObjectiveParameters().size() <<"; strategic count: "<< parameters.size());
00098   if (parameters.size()!=m_GeneralObjectiveScales.size()) throwExceptionMacro("Error. Number of objective parameters and global scales are not equal. Ensure that scales have been set properly. Objective count:" << pIndividual->ObjectiveParameters().size() <<"; objective scales count: "<< m_GeneralObjectiveScales.size());
00099 
00100   for (unsigned long index = 0; index<pIndividual->ObjectiveParameters().size(); index++)
00101   {
00102     IndividualType::StrategicParameterValueType variance = (parameters[index])->GetValue();
00103     IndividualType::ObjectiveParameterType mutatedParameter = (pIndividual->ObjectiveParameters())[index];
00104 
00105     //mutate parameter
00106     mutatedParameter += (m_RandomGenerator->GetVariate()*variance)/m_GeneralObjectiveScales[index];
00107     
00108     //set new value;
00109     (pIndividual->ObjectiveParameters())[index] = mutatedParameter;
00110   }
00111 };
00112 
00113 
00114 } // end of namespace ES
00115 } // end of namespace FREE
00116 
00117 #endif

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