From 43419002fad6fc2d3335cdd16cfdcd5e0a8cacf0 Mon Sep 17 00:00:00 2001 From: jhumeau Date: Mon, 17 Nov 2008 10:17:43 +0000 Subject: [PATCH] Revisions of archives git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1255 331e1502-861f-0410-8da2-ba01fb791d7f --- .../paradiseo-moeo/src/archive/moeoArchive.h | 60 +++++++ .../src/archive/moeoBoundedArchive.h | 170 ++++++++++++++++++ .../src/archive/moeoSPEA2Archive.h | 4 +- .../src/archive/moeoUnboundedArchive.h | 47 +---- 4 files changed, 234 insertions(+), 47 deletions(-) create mode 100644 trunk/paradiseo-moeo/src/archive/moeoBoundedArchive.h diff --git a/trunk/paradiseo-moeo/src/archive/moeoArchive.h b/trunk/paradiseo-moeo/src/archive/moeoArchive.h index 689d9c873..d5e23da1c 100644 --- a/trunk/paradiseo-moeo/src/archive/moeoArchive.h +++ b/trunk/paradiseo-moeo/src/archive/moeoArchive.h @@ -53,6 +53,8 @@ public: using eoPop < MOEOT > :: size; using eoPop < MOEOT > :: operator[]; + using eoPop < MOEOT > :: back; + using eoPop < MOEOT > :: pop_back; /** @@ -110,6 +112,8 @@ public: } return false; } + + /** @@ -148,8 +152,64 @@ public: } return true; } + +protected: + /** + * Updates the archive with a given individual _moeo + * @param _moeo the given individual + */ + void update(const MOEOT & _moeo) + { + // first step: removing the dominated solutions from the archive + for (unsigned int j=0; j & _pop) + { + for (unsigned int i=0; i<_pop.size(); i++) + { + (*this).update(_pop[i]); + } + } + + private: /** The moeoObjectiveVectorComparator used to compare solutions */ diff --git a/trunk/paradiseo-moeo/src/archive/moeoBoundedArchive.h b/trunk/paradiseo-moeo/src/archive/moeoBoundedArchive.h new file mode 100644 index 000000000..6818b82d5 --- /dev/null +++ b/trunk/paradiseo-moeo/src/archive/moeoBoundedArchive.h @@ -0,0 +1,170 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Lille-Nord Europe, 2006-2008 +* (C) OPAC Team, LIFL, 2002-2008 +* +* Arnaud Liefooghe +* Jeremie Humeau +* +* This software is governed by the CeCILL license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL +* license as circulated by CEA, CNRS and INRIA at the following URL +* "http://www.cecill.info". +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited liability. +* +* In this respect, the user's attention is drawn to the risks associated +* with loading, using, modifying and/or developing or reproducing the +* software by the user in light of its specific status of free software, +* that may mean that it is complicated to manipulate, and that also +* therefore means that it is reserved for developers and experienced +* professionals having in-depth computer knowledge. Users are therefore +* encouraged to load and test the software's suitability as regards their +* requirements in conditions enabling the security of their systems and/or +* data to be ensured and, more generally, to use and operate it in the +* same conditions as regards security. +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL license and that you accept its terms. +* +* ParadisEO WebSite : http://paradiseo.gforge.inria.fr +* Contact: paradiseo-help@lists.gforge.inria.fr +* +*/ +//----------------------------------------------------------------------------- +// moeoBoundedArchive.h +//----------------------------------------------------------------------------- + +#ifndef MOEOBOUNDEDARCHIVE_H_ +#define MOEOBOUNDEDARCHIVE_H_ + +#include +#include +#include +#include +#include +#include + +/** + * This class represents a bounded archive which different parameters to specify. + */ +template < class MOEOT > +class moeoBoundedArchive : public moeoArchive < MOEOT > +{ +public: + + using moeoArchive < MOEOT > :: size; + using moeoArchive < MOEOT > :: resize; + using moeoArchive < MOEOT > :: operator[]; + using moeoArchive < MOEOT > :: back; + using moeoArchive < MOEOT > :: pop_back; + using moeoArchive < MOEOT > :: push_back; + using moeoArchive < MOEOT > :: begin; + using moeoArchive < MOEOT > :: end; + + + /** + * The type of an objective vector for a solution + */ + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + + + /** + * Ctor where you can choose your own moeoComparator, moeoObjectiveVectorComparator, moeoFitnessAssignment, moeoDiversityAssignment and archive size. + * @param _indiComparator the functor used to compare MOEOT + * @param _comparator the functor used to compare objective vectors + * @param _fitness the assignment fitness method + * @param _diversity the diversity assignment method + * @param _maxSize the size of archive (must be smaller or egal to the population size) + */ + moeoBoundedArchive(moeoComparator < MOEOT > & _indiComparator, moeoObjectiveVectorComparator < ObjectiveVector > & _comparator, moeoFitnessAssignment < MOEOT > & _fitness, moeoDiversityAssignment < MOEOT > & _diversity, unsigned int _maxSize=100) : moeoArchive < MOEOT >(_comparator), maxSize(_maxSize), indiComparator(_indiComparator), fitness(_fitness), diversity(_diversity) + {} + + /** + * Ctor with moeoParetoObjectiveVectorComparator where you can choose your own moeoComparator, moeoFitnessAssignment, moeoDiversityAssignment and archive size. + * @param _indiComparator the functor used to compare MOEOT + * @param _fitness the assignment fitness method + * @param _diversity the diversity assignment method + * @param _maxSize the size of archive (must be smaller or egal to the population size) + */ + moeoBoundedArchive(moeoComparator < MOEOT > & _indiComparator, moeoFitnessAssignment < MOEOT > & _fitness, moeoDiversityAssignment < MOEOT > & _diversity, unsigned int _maxSize=100) : moeoArchive < MOEOT >(), maxSize(_maxSize), indiComparator(_indiComparator), fitness(_fitness), diversity(_diversity) + {} + + + + + /** + * Updates the archive with a given individual _moeo + * @param _moeo the given individual + */ + void operator()(const MOEOT & _moeo) + { + update(_moeo); + + if(size() > maxSize){ + fitness(*this); + diversity(*this); + std::sort(begin(), end(), indiComparator); + resize(maxSize); + } + } + + + /** + * Updates the archive with a given population _pop + * @param _pop the given population + */ + void operator()(const eoPop < MOEOT > & _pop) + { + update(_pop); + + if(size() > maxSize){ + fitness(*this); + diversity(*this); + std::sort(begin(), end(), indiComparator); + resize(maxSize); + } + } + +private: + + /** archive max size */ + unsigned int maxSize; + /** fitness assignment */ + moeoFitnessAssignment < MOEOT > & fitness; + /** diversity assignment */ + moeoDiversityAssignment < MOEOT > & diversity; + + /** + * Wrapper which allow to used an moeoComparator in std::sort + * @param _comp the comparator to used + */ + class Wrapper + { + public: + /** + * Ctor. + * @param _comp the comparator + */ + Wrapper(moeoComparator < MOEOT > & _comp) : comp(_comp) {} + /** + * Returns true if _moeo1 is greater than _moeo2 according to the comparator + * _moeo1 the first individual + * _moeo2 the first individual + */ + bool operator()(const MOEOT & _moeo1, const MOEOT & _moeo2) + { + return comp(_moeo1,_moeo2); + } + private: + /** the comparator */ + moeoComparator < MOEOT > & comp; + } + indiComparator; + +}; + +#endif /*MOEOBOUNDEDARCHIVE_H_*/ diff --git a/trunk/paradiseo-moeo/src/archive/moeoSPEA2Archive.h b/trunk/paradiseo-moeo/src/archive/moeoSPEA2Archive.h index 8e249008d..d9f3a2762 100644 --- a/trunk/paradiseo-moeo/src/archive/moeoSPEA2Archive.h +++ b/trunk/paradiseo-moeo/src/archive/moeoSPEA2Archive.h @@ -1,5 +1,5 @@ /* -* +* * Copyright (C) DOLPHIN Project-Team, INRIA Lille-Nord Europe, 2006-2008 * (C) OPAC Team, LIFL, 2002-2008 * @@ -35,7 +35,7 @@ * */ //----------------------------------------------------------------------------- -// moeoSPEA2Archive.cpp +// moeoSPEA2Archive.h //----------------------------------------------------------------------------- #ifndef MOEOSPEA2ARCHIVE_H_ diff --git a/trunk/paradiseo-moeo/src/archive/moeoUnboundedArchive.h b/trunk/paradiseo-moeo/src/archive/moeoUnboundedArchive.h index 88625a594..bae417896 100644 --- a/trunk/paradiseo-moeo/src/archive/moeoUnboundedArchive.h +++ b/trunk/paradiseo-moeo/src/archive/moeoUnboundedArchive.h @@ -52,13 +52,6 @@ class moeoUnboundedArchive : public moeoArchive < MOEOT > { public: - using moeoArchive < MOEOT > :: size; - using moeoArchive < MOEOT > :: resize; - using moeoArchive < MOEOT > :: operator[]; - using moeoArchive < MOEOT > :: back; - using moeoArchive < MOEOT > :: pop_back; - - /** * The type of an objective vector for a solution */ @@ -85,40 +78,7 @@ public: */ void operator()(const MOEOT & _moeo) { - // first step: removing the dominated solutions from the archive - for (unsigned int j=0; j & _pop) { - for (unsigned int i=0; i<_pop.size(); i++) - { - (*this)(_pop[i]); - } + update(_pop); } };