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: freOnePlusOneEvolutionarySOOptimizer.h,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 __freOnePlusOneEvolutionarySOOptimizer_h 00023 #define __freOnePlusOneEvolutionarySOOptimizer_h 00024 00025 #include "freSetupOptimizationOptimizer.h" 00026 #include "freRegistrationObserver.h" 00027 #include "freItkSingleValuedCostFunctionWrapper.h" 00028 00029 #include "itkOnePlusOneEvolutionaryOptimizer.h" 00030 #include "itkRandomVariateGeneratorBase.h" 00031 00032 namespace FREE 00033 { 00034 00040 class ITK_EXPORT OnePlusOneEvolutionarySOOptimizer : 00041 public SetupOptimizationOptimizer 00042 { 00043 public: 00045 typedef OnePlusOneEvolutionarySOOptimizer Self; 00046 typedef SetupOptimizationOptimizer Superclass; 00047 typedef itk::SmartPointer<Self> Pointer; 00048 typedef itk::SmartPointer<const Self> ConstPointer; 00049 00051 itkTypeMacro( OnePlusOneEvolutionarySOOptimizer, SetupOptimizationOptimizer ); 00052 00054 itkNewMacro(Self); 00055 00057 typedef itk::Statistics::RandomVariateGeneratorBase NormalVariateGeneratorType ; 00058 00060 void SetMaximize(bool maximize); 00061 itkBooleanMacro( Maximize ); 00062 00064 void SetMaximumIteration(unsigned int maximumIteration); 00065 const unsigned int& GetMaximumIteration() const; 00066 00068 void SetGrowthFactor(double growthFactor); 00069 const double& GetGrowthFactor() const; 00070 00072 void SetShrinkFactor(double shrinkFactor); 00073 const double& GetShrinkFactor() const; 00074 00076 void SetInitialRadius(double initialRadius); 00077 const double& GetInitialRadius() const; 00078 00081 void SetEpsilon(double epsilon); 00082 const double& GetEpsilon() const; 00083 00085 const double& GetFrobeniusNorm() const; 00086 00087 virtual void SetCostFunction( CostFunctionType * costFunction ); 00088 00089 virtual void SetInitialPosition (const ParametersType ¶m); 00090 00091 void SetNormalVariateGenerator(NormalVariateGeneratorType* generator) ; 00092 00093 itkGetConstReferenceMacro( CurrentChildValue, MeasureType ); 00094 itkGetConstReferenceMacro( CurrentChildPosition, ParametersType ); 00095 00102 void Initialize(double initialRadius, double grow = -1, double shrink = -1) ; 00103 00104 virtual void StartOptimization( void ); 00105 00106 virtual void StopOptimization(); 00107 00108 virtual bool IsStoppable() const; 00109 00110 typedef itk::OnePlusOneEvolutionaryOptimizer ItkOptimizerType; 00111 typedef ItkOptimizerType::Pointer ItkOptimizerPointer; 00112 00113 ItkOptimizerType * GetItkOptimizer(); 00114 00115 protected: 00116 OnePlusOneEvolutionarySOOptimizer(); 00117 virtual ~OnePlusOneEvolutionarySOOptimizer(); 00118 void PrintSelf(std::ostream& os, itk::Indent indent) const; 00119 00120 void OnOptIteration(void* pSender, long threadID); 00121 void OnOptStart(void* pSender, long threadID); 00122 void OnOptEnd(void* pSender, long threadID); 00123 00124 IterationObserver::Pointer m_IterationObserver; 00125 NotificationEvent<Self>::Pointer m_IterationNotificationEvent; 00126 00127 typedef RegistrationObserverBase<itk::StartEvent> StartObserver; 00128 StartObserver::Pointer m_StartObserver; 00129 NotificationEvent<Self>::Pointer m_StartNotificationEvent; 00130 00131 typedef RegistrationObserverBase<itk::EndEvent> EndObserver; 00132 EndObserver::Pointer m_EndObserver; 00133 NotificationEvent<Self>::Pointer m_EndNotificationEvent; 00134 00135 ItkOptimizerPointer m_ItkOptimizer; 00136 ItkSingleValuedCostFunctionWrapper::Pointer m_CostFunctionWrapper; 00137 00138 mutable MeasureType m_CurrentChildValue; 00139 mutable ParametersType m_CurrentChildPosition; 00140 00141 private: 00142 OnePlusOneEvolutionarySOOptimizer(const Self&); //purposely not implemented 00143 void operator=(const Self&);//purposely not implemented 00144 }; 00145 00146 } // end namespace FREE 00147 00148 #endif 00149 00150
1.5.3 written by Dimitri van Heesch,
© 1997-2000