Archive modified

git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1396 331e1502-861f-0410-8da2-ba01fb791d7f
This commit is contained in:
jhumeau 2009-02-03 15:16:17 +00:00
commit c78c4c2f6b
5 changed files with 42 additions and 35 deletions

View file

@ -42,12 +42,17 @@
#include <comparator/moeoObjectiveVectorComparator.h> #include <comparator/moeoObjectiveVectorComparator.h>
#include <comparator/moeoParetoObjectiveVectorComparator.h> #include <comparator/moeoParetoObjectiveVectorComparator.h>
//template < class MOEOT >
//class ufMOEOT : public eoUF < const MOEOT &, bool> {};
//template < class MOEOT >
//class ufPop : eoUF < const eoPop < MOEOT > &, bool> {};
/** /**
* Abstract class for representing an archive ; * Abstract class for representing an archive ;
* an archive is a secondary population that stores non-dominated solutions. * an archive is a secondary population that stores non-dominated solutions.
*/ */
template < class MOEOT > template < class MOEOT >
class moeoArchive : public eoPop < MOEOT > class moeoArchive : public eoPop < MOEOT >, public eoUF < const MOEOT &, bool>, public eoUF < const eoPop < MOEOT > &, bool>
{ {
public: public:
@ -112,22 +117,24 @@ public:
} }
return false; return false;
} }
/** /**
* Updates the archive with a given individual _moeo * Updates the archive with a given individual _moeo
* @param _moeo the given individual * @param _moeo the given individual
* @return if the _moeo is added to the archive
*/ */
virtual void operator()(const MOEOT & _moeo) = 0; virtual bool operator()(const MOEOT & _moeo) = 0;
/** /**
* Updates the archive with a given population _pop * Updates the archive with a given population _pop
* @param _pop the given population * @param _pop the given population
* @return if at least one _pop[i] is added to the archive
*/ */
virtual void operator()(const eoPop < MOEOT > & _pop) = 0; virtual bool operator()(const eoPop < MOEOT > & _pop) = 0;
/** /**
@ -152,13 +159,13 @@ public:
} }
return true; return true;
} }
protected: protected:
/** /**
* Updates the archive with a given individual _moeo * Updates the archive with a given individual _moeo
* @param _moeo the given individual * @param _moeo the given individual
*/ */
void update(const MOEOT & _moeo) bool update(const MOEOT & _moeo)
{ {
// first step: removing the dominated solutions from the archive // first step: removing the dominated solutions from the archive
for (unsigned int j=0; j<size();) for (unsigned int j=0; j<size();)
@ -194,6 +201,7 @@ protected:
{ {
push_back(_moeo); push_back(_moeo);
} }
return !dom;
} }
@ -201,14 +209,16 @@ protected:
* Updates the archive with a given population _pop * Updates the archive with a given population _pop
* @param _pop the given population * @param _pop the given population
*/ */
void update(const eoPop < MOEOT > & _pop) bool update(const eoPop < MOEOT > & _pop)
{ {
bool res = false;
for (unsigned int i=0; i<_pop.size(); i++) for (unsigned int i=0; i<_pop.size(); i++)
{ {
(*this).update(_pop[i]); res = (*this).update(_pop[i]) || res;
} }
return res;
} }
private: private:

View file

@ -99,10 +99,12 @@ public:
/** /**
* Updates the archive with a given individual _moeo * Updates the archive with a given individual _moeo
* @param _moeo the given individual * @param _moeo the given individual
* @return true if _moeo is non-dominated (and not if it is added to the archive)
*/ */
void operator()(const MOEOT & _moeo) bool operator()(const MOEOT & _moeo)
{ {
update(_moeo); bool res;
res = update(_moeo);
if(size() > maxSize){ if(size() > maxSize){
fitness(*this); fitness(*this);
@ -110,16 +112,19 @@ public:
std::sort(begin(), end(), indiComparator); std::sort(begin(), end(), indiComparator);
resize(maxSize); resize(maxSize);
} }
return res;
} }
/** /**
* Updates the archive with a given population _pop * Updates the archive with a given population _pop
* @param _pop the given population * @param _pop the given population
* @return true if a _pop[i] is non-dominated (and not if it is added to the archive)
*/ */
void operator()(const eoPop < MOEOT > & _pop) bool operator()(const eoPop < MOEOT > & _pop)
{ {
update(_pop); bool res;
res = update(_pop);
if(size() > maxSize){ if(size() > maxSize){
fitness(*this); fitness(*this);
@ -127,6 +132,7 @@ public:
std::sort(begin(), end(), indiComparator); std::sort(begin(), end(), indiComparator);
resize(maxSize); resize(maxSize);
} }
return res;
} }
private: private:

View file

@ -73,20 +73,6 @@ public:
*/ */
moeoFixedSizeArchive(moeoObjectiveVectorComparator < ObjectiveVector > & _comparator) : moeoArchive < MOEOT >( _comparator) {} moeoFixedSizeArchive(moeoObjectiveVectorComparator < ObjectiveVector > & _comparator) : moeoArchive < MOEOT >( _comparator) {}
/**
* Updates the archive with a given individual _moeo
* @param _moeo the given individual
*/
virtual void operator()(const MOEOT & _moeo)=0;
/**
* Updates the archive with a given population _pop
* @param _pop the given population
*/
virtual void operator()(const eoPop < MOEOT > & _pop)=0;
}; };
#endif /*MOEOFIXEDSIZEARCHIVE_H_*/ #endif /*MOEOFIXEDSIZEARCHIVE_H_*/

View file

@ -126,20 +126,23 @@ public:
/** /**
* Updates the archive with a given individual _moeo * Updates the archive with a given individual _moeo
* @param _moeo the given individual * @param _moeo the given individual
* @return true (TODO)
*/ */
void operator()(const MOEOT & _moeo) bool operator()(const MOEOT & _moeo)
{ {
eoPop < MOEOT > pop_tmp; eoPop < MOEOT > pop_tmp;
pop_tmp.push_back(_moeo); pop_tmp.push_back(_moeo);
operator()(pop_tmp); operator()(pop_tmp);
return true;
} }
/** /**
* Updates the archive with a given population _pop * Updates the archive with a given population _pop
* @param _pop the given population * @param _pop the given population
* @return true (TODO)
*/ */
void operator()(const eoPop < MOEOT > & _pop) bool operator()(const eoPop < MOEOT > & _pop)
{ {
unsigned int i; unsigned int i;
unsigned int foo=0; unsigned int foo=0;
@ -275,7 +278,7 @@ public:
} }
} }
} }
return true;
}//endoperator() }//endoperator()

View file

@ -75,20 +75,22 @@ public:
/** /**
* Updates the archive with a given individual _moeo * Updates the archive with a given individual _moeo
* @param _moeo the given individual * @param _moeo the given individual
* @return true if _moeo is added to the archive
*/ */
void operator()(const MOEOT & _moeo) bool operator()(const MOEOT & _moeo)
{ {
update(_moeo); return update(_moeo);
} }
/** /**
* Updates the archive with a given population _pop * Updates the archive with a given population _pop
* @param _pop the given population * @param _pop the given population
* @return true if a _pop[i] is added to the archive
*/ */
void operator()(const eoPop < MOEOT > & _pop) bool operator()(const eoPop < MOEOT > & _pop)
{ {
update(_pop); return update(_pop);
} }
}; };