00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __freESRankRecombinator_h
00023 #define __freESRankRecombinator_h
00024
00025 #include "freESRecombinatorBase.h"
00026
00027 namespace FREE
00028 {
00029 namespace ES
00030 {
00031
00051 template <class TIndividual>
00052 class ITK_EXPORT RankRecombinator:
00053 public RecombinatorBase<TIndividual>
00054 {
00055 public:
00057 typedef RankRecombinator<TIndividual> Self ;
00058 typedef RecombinatorBase<TIndividual> Superclass;
00059 typedef itk::SmartPointer<Self> Pointer;
00060 typedef itk::SmartPointer<const Self> ConstPointer;
00061
00063 itkNewMacro(Self);
00064
00066 itkTypeMacro(RankRecombinator, RecombinatorBase);
00067
00068 typedef typename Superclass::IndividualType IndividualType;
00069 typedef typename IndividualType::Pointer IndividualPointer;
00070 typedef std::vector<IndividualPointer> ParentSelectionType;
00071 typedef std::vector<double> WeightVectorType;
00072
00073 IndividualPointer Recombine(const ParentSelectionType& parents) const;
00074
00075 WeightVectorType GetWeights(const unsigned long lParentCount) const;
00076
00077 itkSetMacro(RankDirection, bool);
00078 itkGetMacro(RankDirection, bool);
00079
00080 protected:
00082 RankRecombinator() ;
00083
00086 bool m_RankDirection;
00087
00088 double ComputeWeight(const unsigned long lRank, const unsigned long lParentCount) const;
00089
00090 private:
00091 RankRecombinator(Self const&);
00092
00093 } ;
00094
00095 }
00096 }
00097
00098
00099 #ifndef ITK_MANUAL_INSTANTIATION
00100 #include "freESRankRecombinator.txx"
00101 #endif
00102
00103 #endif