From 7db3652f80f48ccb50987486457f9048a6b21d10 Mon Sep 17 00:00:00 2001 From: wcancino Date: Mon, 19 Jan 2009 20:02:57 +0000 Subject: [PATCH] This commit introduces three new MOEO classes. Such classes calculate statistics (best element and average scores) for each objective function separately git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1351 331e1502-861f-0410-8da2-ba01fb791d7f --- .../src/utils/moeoAverageObjVecStat.h | 91 +++++++++++++++ .../src/utils/moeoBestObjVecStat.h | 110 ++++++++++++++++++ .../paradiseo-moeo/src/utils/moeoObjVecStat.h | 70 +++++++++++ 3 files changed, 271 insertions(+) create mode 100644 trunk/paradiseo-moeo/src/utils/moeoAverageObjVecStat.h create mode 100644 trunk/paradiseo-moeo/src/utils/moeoBestObjVecStat.h create mode 100644 trunk/paradiseo-moeo/src/utils/moeoObjVecStat.h diff --git a/trunk/paradiseo-moeo/src/utils/moeoAverageObjVecStat.h b/trunk/paradiseo-moeo/src/utils/moeoAverageObjVecStat.h new file mode 100644 index 000000000..86116860e --- /dev/null +++ b/trunk/paradiseo-moeo/src/utils/moeoAverageObjVecStat.h @@ -0,0 +1,91 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2009 +* +* +* Waldo Cancino, Arnaud Liefooghe +* +* 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MOEOAVERAGEOBJVECSTAT_H_ +#define MOEOAVERAGEOBJVECSTAT_H_ + +#include + +/** Calculates average scores for each objective +*/ + + +template class moeoAverageObjVecStat : public moeoObjVecStat +{ +public : + + using moeoObjVecStat::value; + typedef typename moeoObjVecStat::ObjectiveVector ObjectiveVector; + + + moeoAverageObjVecStat(std::string _description = "Average Objective Vector") + : moeoObjVecStat(_description) {} + + + virtual std::string className(void) const { return "moeoAverageObjVecStat"; } + +private : + + typedef typename MOEOT::ObjectiveVector::Type Type; + + template struct sumObjVec + { + sumObjVec(unsigned _which) : which(_which) {} + + Type operator()(Type &result, const MOEOT& _obj) + { + return result + _obj.objectiveVector()[which]; + } + + unsigned which; + }; + + // Specialization for pareto fitness + void doit(const eoPop& _pop) + { + typedef typename moeoObjVecStat::Traits traits; + value().resize(traits::nObjectives()); + + for (unsigned o = 0; o < value().size(); ++o) + { + value()[o] = std::accumulate(_pop.begin(), _pop.end(), Type(), sumObjVec(o)); + value()[o] /= _pop.size(); + } + } +}; + +#endif diff --git a/trunk/paradiseo-moeo/src/utils/moeoBestObjVecStat.h b/trunk/paradiseo-moeo/src/utils/moeoBestObjVecStat.h new file mode 100644 index 000000000..608a209f8 --- /dev/null +++ b/trunk/paradiseo-moeo/src/utils/moeoBestObjVecStat.h @@ -0,0 +1,110 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2009 +* +* +* Waldo Cancino, Arnaud Liefooghe +* +* 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MOEOBESTOBJVECSTAT_H_ +#define MOEOBESTOBJVECSTAT_H_ + +#include + +/** Calculate the best solution for each objective (extreme points +*/ + +template +class moeoBestObjVecStat : public moeoObjVecStat +{ +public: + + using moeoObjVecStat::value; + typedef typename moeoObjVecStat::ObjectiveVector ObjectiveVector; + + + moeoBestObjVecStat(std::string _description = "Best ") + : moeoObjVecStat(_description) + {} + + + virtual std::string className(void) const { return "moeoBestObjVecStat"; } + + /** + Return the best solutions for an given objective function + * @param which the objective function number + */ + const MOEOT & bestindividuals(unsigned int which) { + typedef typename moeoObjVecStat::Traits traits; + if(which > traits::nObjectives() ) throw std::logic_error("which is larger than the number of objectives"); + return *(best_individuals[which]); + } + +private : + + /** Vector of iterators pointing to best individuals for each objective function */ + + std::vector::const_iterator> best_individuals; + + struct CmpObjVec + { + CmpObjVec(unsigned _which, bool _maxim) : which(_which), maxim(_maxim) {} + + bool operator()(const MOEOT& a, const MOEOT& b) + { + if (maxim) + return a.objectiveVector()[which] < b.objectiveVector()[which]; + + return a.objectiveVector()[which] > b.objectiveVector()[which]; + } + + unsigned which; + bool maxim; + }; + + // Specialization for objective vector + void doit(const eoPop& _pop) + { + typedef typename moeoObjVecStat::Traits traits; + + value().resize(traits::nObjectives()); + + for (unsigned o = 0; o < traits::nObjectives(); ++o) + { + typename eoPop::const_iterator it = std::max_element(_pop.begin(), _pop.end(), CmpObjVec(o, traits::maximizing(o))); + value()[o] = it->objectiveVector()[o]; + best_individuals.push_back( it ); + } + } + // default +}; +#endif \ No newline at end of file diff --git a/trunk/paradiseo-moeo/src/utils/moeoObjVecStat.h b/trunk/paradiseo-moeo/src/utils/moeoObjVecStat.h new file mode 100644 index 000000000..1e0b9e2a4 --- /dev/null +++ b/trunk/paradiseo-moeo/src/utils/moeoObjVecStat.h @@ -0,0 +1,70 @@ +/* +* +* Copyright (C) DOLPHIN Project-Team, INRIA Futurs, 2009 +* +* +* Waldo Cancino, Arnaud Liefooghe +* +* 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 +* +*/ +//----------------------------------------------------------------------------- + +#ifndef MOEOOBJVECSTAT_H_ +#define MOEOOBJVECSTAT_H_ + +#include + +/** + This base class is a specialization of eoStat which is useful + to compute statistics for each objective function +*/ + +#if defined(_MSC_VER) && (_MSC_VER < 1300) +template +class moeoObjVecStat : public eoStat +#else +template +class moeoObjVecStat : public eoStat +#endif +{ + public: + using eoStat::value; + + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + typedef typename MOEOT::ObjectiveVector::Traits Traits; + + moeoObjVecStat(std::string _description = "") + : eoStat(ObjectiveVector(), _description) + {} + + virtual void operator()(const eoPop& _pop) { doit(_pop); }; + private: + virtual void doit(const eoPop &_pop) = 0; +}; +#endif