00001 00019 #ifndef _INIT_IND_H 00020 00021 #define _INIT_IND_H 1 00022 00023 #include "real.h" 00024 #include "domain.h" 00025 #include <deque> 00026 00027 using std::deque; 00028 00029 namespace realea { 00034 class InitIndividual { 00035 public: 00039 virtual void reset(DomainRealPtr domain, unsigned count)=0; 00044 virtual void resetBest(DomainRealPtr domain,const tChromosomeReal &best, unsigned count)=0; 00050 virtual void createInd(DomainRealPtr domain, tChromosomeReal &crom)=0; 00051 virtual ~InitIndividual(void) {} 00052 }; 00053 00054 namespace internal { 00055 00056 class SimpleInitInd : public InitIndividual { 00057 public: 00058 SimpleInitInd(Random *random) { 00059 m_random = random; 00060 } 00061 void reset(DomainRealPtr domain, unsigned count); 00062 void resetBest(DomainRealPtr domain,const tChromosomeReal &best, unsigned count); 00063 void createInd(DomainRealPtr domain, tChromosomeReal &crom); 00064 ~SimpleInitInd(void) {} 00065 private: 00066 Random *m_random; 00067 }; 00068 00069 struct ElemRangeInit { 00070 unsigned interval; 00071 unsigned count; 00072 }; 00073 00081 class ElemDimInit { 00082 private: 00083 tGen m_min; 00084 unsigned m_size; 00085 vector<ElemRangeInit> m_interval; 00086 double m_range; 00087 public: 00095 ElemDimInit(tGen min, tGen max, unsigned count, unsigned intervals); 00099 void reduce(tGen value); 00104 tGen random(Random *random); 00105 }; 00106 00107 class UniformInitInd : public InitIndividual { 00108 public: 00109 UniformInitInd(Random *random) : m_random(random), m_interval_dim() { 00110 m_random = random; 00111 } 00112 00113 void reset(DomainRealPtr domain, unsigned count); 00114 void resetBest(DomainRealPtr domain,const tChromosomeReal &best, unsigned count); 00115 void createInd(DomainRealPtr domain, tChromosomeReal &crom); 00116 ~UniformInitInd(void); 00117 private: 00118 Random *m_random; 00119 deque<ElemDimInit> m_interval_dim; 00120 }; 00121 00122 } 00123 00124 } 00125 00126 #endif