From c44b212ee6b492099abd297cd73e83504182c063 Mon Sep 17 00:00:00 2001 From: liefooga Date: Mon, 2 Jul 2007 13:54:16 +0000 Subject: [PATCH] add some abstract classes git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@492 331e1502-861f-0410-8da2-ba01fb791d7f --- ...oeoBinaryIndicatorBasedFitnessAssignment.h | 24 +++ ...ExpBinaryIndicatorBasedFitnessAssignment.h | 202 ++++++++++++++++++ .../moeoIndicatorBasedFitnessAssignment.h | 182 +--------------- ...moeoUnaryIndicatorBasedFitnessAssignment.h | 24 +++ 4 files changed, 252 insertions(+), 180 deletions(-) create mode 100644 trunk/paradiseo-moeo/src/fitness/moeoBinaryIndicatorBasedFitnessAssignment.h create mode 100644 trunk/paradiseo-moeo/src/fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h create mode 100644 trunk/paradiseo-moeo/src/fitness/moeoUnaryIndicatorBasedFitnessAssignment.h diff --git a/trunk/paradiseo-moeo/src/fitness/moeoBinaryIndicatorBasedFitnessAssignment.h b/trunk/paradiseo-moeo/src/fitness/moeoBinaryIndicatorBasedFitnessAssignment.h new file mode 100644 index 000000000..c27fedfc5 --- /dev/null +++ b/trunk/paradiseo-moeo/src/fitness/moeoBinaryIndicatorBasedFitnessAssignment.h @@ -0,0 +1,24 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoBinaryIndicatorBasedFitnessAssignment.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOBINARYINDICATORBASEDFITNESSASSIGNMENT_H_ +#define MOEOBINARYINDICATORBASEDFITNESSASSIGNMENT_H_ + +#include + +/** + * moeoIndicatorBasedFitnessAssignment for binary indicators. + */ +template < class MOEOT > +class moeoBinaryIndicatorBasedFitnessAssignment : public moeoIndicatorBasedFitnessAssignment < MOEOT > {}; + +#endif /*MOEOINDICATORBASEDFITNESSASSIGNMENT_H_*/ diff --git a/trunk/paradiseo-moeo/src/fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h b/trunk/paradiseo-moeo/src/fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h new file mode 100644 index 000000000..9c8f8bbd2 --- /dev/null +++ b/trunk/paradiseo-moeo/src/fitness/moeoExpBinaryIndicatorBasedFitnessAssignment.h @@ -0,0 +1,202 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoIndicatorBasedFitnessAssignment.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOEXPBINARYINDICATORBASEDFITNESSASSIGNMENT_H_ +#define MOEOEXPBINARYINDICATORBASEDFITNESSASSIGNMENT_H_ + +#include +#include +#include +#include +#include +#include + +/** + * Fitness assignment sheme based on an indicator proposed in: + * E. Zitzler, S. Künzli, "Indicator-Based Selection in Multiobjective Search", Proc. 8th International Conference on Parallel Problem Solving from Nature (PPSN VIII), pp. 832-842, Birmingham, UK (2004). + * This strategy is, for instance, used in IBEA. + */ +template < class MOEOT > +class moeoExpBinaryIndicatorBasedFitnessAssignment : public moeoBinaryIndicatorBasedFitnessAssignment < MOEOT > +{ +public: + + /** The type of objective vector */ + typedef typename MOEOT::ObjectiveVector ObjectiveVector; + + + /** + * Ctor. + * @param _metric the quality indicator + * @param _kappa the scaling factor + */ + moeoExpBinaryIndicatorBasedFitnessAssignment(moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double > & _metric, const double _kappa = 0.05) : metric(_metric), kappa(_kappa) + {} + + + /** + * Sets the fitness values for every solution contained in the population _pop + * @param _pop the population + */ + void operator()(eoPop < MOEOT > & _pop) + { + // 1 - setting of the bounds + setup(_pop); + // 2 - computing every indicator values + computeValues(_pop); + // 3 - setting fitnesses + setFitnesses(_pop); + } + + + /** + * Updates the fitness values of the whole population _pop by taking the deletion of the objective vector _objVec into account. + * @param _pop the population + * @param _objVec the objective vector + */ + void updateByDeleting(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec) + { + std::vector < double > v; + v.resize(_pop.size()); + for (unsigned int i=0; i<_pop.size(); i++) + { + v[i] = metric(_objVec, _pop[i].objectiveVector()); + } + for (unsigned int i=0; i<_pop.size(); i++) + { + _pop[i].fitness( _pop[i].fitness() + exp(-v[i]/kappa) ); + } + } + + + /** + * Updates the fitness values of the whole population _pop by taking the adding of the objective vector _objVec into account + * and returns the fitness value of _objVec. + * @param _pop the population + * @param _objVec the objective vector + */ + double updateByAdding(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec) + { + std::vector < double > v; + // update every fitness values to take the new individual into account + v.resize(_pop.size()); + for (unsigned int i=0; i<_pop.size(); i++) + { + v[i] = metric(_objVec, _pop[i].objectiveVector()); + } + for (unsigned int i=0; i<_pop.size(); i++) + { + _pop[i].fitness( _pop[i].fitness() - exp(-v[i]/kappa) ); + } + // compute the fitness of the new individual + v.clear(); + v.resize(_pop.size()); + for (unsigned int i=0; i<_pop.size(); i++) + { + v[i] = metric(_pop[i].objectiveVector(), _objVec); + } + double result = 0; + for (unsigned int i=0; i & metric; + /** the scaling factor */ + double kappa; + /** the computed indicator values */ + std::vector < std::vector > values; + + + /** + * Sets the bounds for every objective using the min and the max value for every objective vector of _pop + * @param _pop the population + */ + void setup(const eoPop < MOEOT > & _pop) + { + double min, max; + for (unsigned int i=0; i & _pop) + { + values.clear(); + values.resize(_pop.size()); + for (unsigned int i=0; i<_pop.size(); i++) + { + values[i].resize(_pop.size()); + for (unsigned int j=0; j<_pop.size(); j++) + { + if (i != j) + { + values[i][j] = metric(_pop[i].objectiveVector(), _pop[j].objectiveVector()); + } + } + } + } + + + /** + * Sets the fitness value of the whple population + * @param _pop the population + */ + void setFitnesses(eoPop < MOEOT > & _pop) + { + for (unsigned int i=0; i<_pop.size(); i++) + { + _pop[i].fitness(computeFitness(i)); + } + } + + + /** + * Returns the fitness value of the _idx th individual of the population + * @param _idx the index + */ + double computeFitness(const unsigned int _idx) + { + double result = 0; + for (unsigned int i=0; i -#include -#include #include -#include -#include /** - * Fitness assignment sheme based an Indicator proposed in: - * E. Zitzler, S. Künzli, "Indicator-Based Selection in Multiobjective Search", Proc. 8th International Conference on Parallel Problem Solving from Nature (PPSN VIII), pp. 832-842, Birmingham, UK (2004). - * This strategy is, for instance, used in IBEA. + * moeoIndicatorBasedFitnessAssignment is a moeoFitnessAssignment for Indicator-based strategies. */ template < class MOEOT > -class moeoIndicatorBasedFitnessAssignment : public moeoFitnessAssignment < MOEOT > -{ -public: - - /** The type of objective vector */ - typedef typename MOEOT::ObjectiveVector ObjectiveVector; - - - /** - * Ctor. - * @param _metric the quality indicator - * @param _kappa the scaling factor - */ - moeoIndicatorBasedFitnessAssignment(moeoNormalizedSolutionVsSolutionBinaryMetric < ObjectiveVector, double > & _metric, const double _kappa = 0.05) : metric(_metric), kappa(_kappa) - {} - - - /** - * Sets the fitness values for every solution contained in the population _pop - * @param _pop the population - */ - void operator()(eoPop < MOEOT > & _pop) - { - // 1 - setting of the bounds - setup(_pop); - // 2 - computing every indicator values - computeValues(_pop); - // 3 - setting fitnesses - setFitnesses(_pop); - } - - - /** - * Updates the fitness values of the whole population _pop by taking the deletion of the objective vector _objVec into account. - * @param _pop the population - * @param _objVec the objective vector - */ - void updateByDeleting(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec) - { - std::vector < double > v; - v.resize(_pop.size()); - for (unsigned int i=0; i<_pop.size(); i++) - { - v[i] = metric(_objVec, _pop[i].objectiveVector()); - } - for (unsigned int i=0; i<_pop.size(); i++) - { - _pop[i].fitness( _pop[i].fitness() + exp(-v[i]/kappa) ); - } - } - - - /** - * Updates the fitness values of the whole population _pop by taking the adding of the objective vector _objVec into account - * and returns the fitness value of _objVec. - * @param _pop the population - * @param _objVec the objective vector - */ - double updateByAdding(eoPop < MOEOT > & _pop, ObjectiveVector & _objVec) - { - std::vector < double > v; - // update every fitness values to take the new individual into account - v.resize(_pop.size()); - for (unsigned int i=0; i<_pop.size(); i++) - { - v[i] = metric(_objVec, _pop[i].objectiveVector()); - } - for (unsigned int i=0; i<_pop.size(); i++) - { - _pop[i].fitness( _pop[i].fitness() - exp(-v[i]/kappa) ); - } - // compute the fitness of the new individual - v.clear(); - v.resize(_pop.size()); - for (unsigned int i=0; i<_pop.size(); i++) - { - v[i] = metric(_pop[i].objectiveVector(), _objVec); - } - double result = 0; - for (unsigned int i=0; i & metric; - /** the scaling factor */ - double kappa; - /** the computed indicator values */ - std::vector < std::vector > values; - - - /** - * Sets the bounds for every objective using the min and the max value for every objective vector of _pop - * @param _pop the population - */ - void setup(const eoPop < MOEOT > & _pop) - { - double min, max; - for (unsigned int i=0; i & _pop) - { - values.clear(); - values.resize(_pop.size()); - for (unsigned int i=0; i<_pop.size(); i++) - { - values[i].resize(_pop.size()); - for (unsigned int j=0; j<_pop.size(); j++) - { - if (i != j) - { - values[i][j] = metric(_pop[i].objectiveVector(), _pop[j].objectiveVector()); - } - } - } - } - - - /** - * Sets the fitness value of the whple population - * @param _pop the population - */ - void setFitnesses(eoPop < MOEOT > & _pop) - { - for (unsigned int i=0; i<_pop.size(); i++) - { - _pop[i].fitness(computeFitness(i)); - } - } - - - /** - * Returns the fitness value of the _idx th individual of the population - * @param _idx the index - */ - double computeFitness(const unsigned int _idx) - { - double result = 0; - for (unsigned int i=0; i {}; #endif /*MOEOINDICATORBASEDFITNESSASSIGNMENT_H_*/ diff --git a/trunk/paradiseo-moeo/src/fitness/moeoUnaryIndicatorBasedFitnessAssignment.h b/trunk/paradiseo-moeo/src/fitness/moeoUnaryIndicatorBasedFitnessAssignment.h new file mode 100644 index 000000000..47508effb --- /dev/null +++ b/trunk/paradiseo-moeo/src/fitness/moeoUnaryIndicatorBasedFitnessAssignment.h @@ -0,0 +1,24 @@ +// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + +//----------------------------------------------------------------------------- +// moeoUnaryIndicatorBasedFitnessAssignment.h +// (c) OPAC Team (LIFL), Dolphin Project (INRIA), 2007 +/* + This library... + + Contact: paradiseo-help@lists.gforge.inria.fr, http://paradiseo.gforge.inria.fr + */ +//----------------------------------------------------------------------------- + +#ifndef MOEOUNARYINDICATORBASEDFITNESSASSIGNMENT_H_ +#define MOEOUNARYINDICATORBASEDFITNESSASSIGNMENT_H_ + +#include + +/** + * moeoIndicatorBasedFitnessAssignment for unary indicators. + */ +template < class MOEOT > +class moeoUnaryIndicatorBasedFitnessAssignment : public moeoIndicatorBasedFitnessAssignment < MOEOT > {}; + +#endif /*MOEOINDICATORBASEDFITNESSASSIGNMENT_H_*/