35 #ifndef DYNAMICSTRATEGY_D_H 36 #define DYNAMICSTRATEGY_D_H 62 int beginIndex ,
int endIndex ,
64 aims::
KmeansStrategy<T>( nbIterations, distanceType, beginIndex, endIndex, codeVector )
86 std::cout <<
"Dynamic clustering - Iteration n° " << nbOfIterations << std::endl ;
87 int nbOfClasses = classes.size() ;
89 unsigned int classCardNew, classCardOld ;
97 std::vector< std::list< aims::Individuals<T> > >* newClasses ;
98 newClasses = &classes ;
101 if( !nbOfIterations && ( classes[0].size() != 0 ) ){
103 typename std::list< aims::Individuals<T> >
::iterator iter( classes[0].begin() ),
104 last( classes[0].end() ) ;
105 while( iter != last ){
107 (*newClasses)[indMin].push_back( *iter ) ;
110 (*newClasses)[0].clear() ;
115 for(
int c = 0 ; c < nbOfClasses ; ++c ){
116 typename std::list< aims::Individuals<T> >
::iterator iter( classes[c].begin() ),
117 last( classes[c].end() ), iterToMove ;
118 while( iter != last ){
125 classCardNew = (*newClasses)[indMin].size() ;
126 classCardOld = (*newClasses)[c].size() ;
130 (*newClasses)[indMin].push_back( *iterToMove ) ;
131 (*newClasses)[c].erase( iterToMove ) ;
137 classes = *newClasses ;
139 std::cout <<
"nb d'individus - iterate end :" ;
140 for(
int c = 0 ; c < nbOfClasses ; ++c )
141 std::cout <<
" " << classes[c].size() ;
142 std::cout << std::endl ;
164 for (
int i = 0 ; i < 3 ; ++i ){
165 meanIndivPosNew[i] = ( ( meanIndivPosNew[i] * cardNew ) + indPos[i] ) / ( cardNew + 1 ) ;
166 meanIndivPosOld[i] = ( ( meanIndivPosOld[i] * cardOld ) - indPos[i] ) / ( cardOld - 1 ) ;
169 std::vector<T> indVal = ind.
value() ;
170 unsigned int valIndSize = indVal.size() ;
172 std::vector<T> meanIndivValNew = meanIndivNew.
value() ;
173 std::vector<T> meanIndivValOld = meanIndivOld.
value() ;
174 std::vector<T> meanIndivValNewClass = meanIndivValNew ;
175 std::vector<T> meanIndivValOldClass = meanIndivValOld ;
177 for(
unsigned int k = 0 ; k < valIndSize ; ++k ){
178 meanIndivValNewClass[k] = ( ( meanIndivValNew[k] * cardNew ) + indVal[k] ) / ( cardNew + 1 ) ;
179 meanIndivValOldClass[k] = ( ( meanIndivValOld[k] * cardOld ) - indVal[k] ) / ( cardOld - 1 ) ;
182 Individuals<T> newMeanIndiv( meanIndivPosNew, meanIndivValNewClass ) ;
184 Individuals<T> oldMeanIndiv( meanIndivPosOld, meanIndivValOldClass ) ;
virtual double globInertia(const std::vector< std::list< Individuals< T > > > &classes)
std::vector< Individuals< T > > myMeanVector
DynamicStrategy(const DynamicStrategy< T > &dynamicStrat)
virtual Individuals< T > getMeanValue(int classe)
float(* myDistance)(const std::vector< T > &ind1, const std::vector< T > &ind2, unsigned int beginIndex, unsigned int endIndex)
virtual void analyse(const std::vector< std::list< Individuals< T > > > &classes)
virtual ~DynamicStrategy()
virtual ClassifStrategy< T > * clone() const
std::vector< Individuals< T > > myVarianceVector
virtual double iterate(int &nbOfIterations, std::vector< std::list< Individuals< T > > > &classes)
const std::vector< T > & value() const
virtual int aggregate(const Individuals< T > &individual)
const Point3df & position() const
void centerComputation(int cNew, int cOld, unsigned int cardNew, unsigned int cardOld, const Individuals< T > &ind)