From b6798df567154009f6d6320275cf8e9dd3d7c103 Mon Sep 17 00:00:00 2001 From: jhumeau Date: Tue, 12 Aug 2008 15:34:03 +0000 Subject: [PATCH] moeoHyperVolumeMetric and moeoHyperVolumeDifferenceMetric are available. git-svn-id: svn://scm.gforge.inria.fr/svnroot/paradiseo@1238 331e1502-861f-0410-8da2-ba01fb791d7f --- .../metric/moeoHyperVolumeDifferenceMetric.h | 119 ++++++++++++++++++ .../src/metric/moeoHyperVolumeMetric.h | 34 ++--- trunk/paradiseo-moeo/src/moeo | 1 + 3 files changed, 140 insertions(+), 14 deletions(-) diff --git a/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeDifferenceMetric.h b/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeDifferenceMetric.h index 17a58e0b3..8ca9fce1a 100644 --- a/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeDifferenceMetric.h +++ b/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeDifferenceMetric.h @@ -48,6 +48,125 @@ template < class ObjectiveVector > class moeoHyperVolumeDifferenceMetric : public moeoVectorVsVectorBinaryMetric < ObjectiveVector, double > { + public: + + /** + * Constructor with a coefficient (rho) + * @param _normalize allow to normalize data (default true) + * @param _rho coefficient to determine the reference point. + */ + moeoHyperVolumeDifferenceMetric(bool _normalize=true, double _rho=1.1): normalize(_normalize), rho(_rho), ref_point(NULL){ + bounds.resize(ObjectiveVector::Traits::nObjectives()); + // initialize bounds in case someone does not want to use them + for (unsigned int i=0; i & _set1, const std::vector < ObjectiveVector > & _set2) + { + double hypervolume_set1; + double hypervolume_set2; + + if(rho >= 1.0){ + //determine bounds + setup(_set1, _set2); + //determine reference point + for (unsigned int i=0; i unaryMetric(ref_point, bounds); + hypervolume_set1 = unaryMetric(_set1); + hypervolume_set2 = unaryMetric(_set2); + + return hypervolume_set1 - hypervolume_set2; + } + + /** + * getter on bounds + * @return bounds + */ + std::vector < eoRealInterval > getBounds(){ + return bounds; + } + + /** + * method caclulate bounds for the normalization + * @param _set the vector of objective vectors + */ + void setup(const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2){ + if(_set1.size() < 1 || _set2.size() < 1) + throw("Error in moeoHyperVolumeUnaryMetric::setup -> argument1: vector size must be greater than 0"); + else{ + double min, max; + unsigned int nbObj=ObjectiveVector::Traits::nObjectives(); + bounds.resize(nbObj); + for (unsigned int i=0; i bounds; + + ObjectiveVector ref_point; }; diff --git a/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeMetric.h b/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeMetric.h index 2ff11acc0..b9acaa419 100644 --- a/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeMetric.h +++ b/trunk/paradiseo-moeo/src/metric/moeoHyperVolumeMetric.h @@ -69,16 +69,22 @@ class moeoHyperVolumeMetric : public moeoVectorUnaryMetric < ObjectiveVector , d * @param _normalize allow to normalize data (default true) * @param _ref_point the reference point */ - moeoHyperVolumeMetric(bool _normalize=true, ObjectiveVector _ref_point=NULL): normalize(_normalize), rho(0.0), ref_point(_ref_point){ - bounds.resize(ObjectiveVector::Traits::nObjectives()); - // initialize bounds in case someone does not want to use them - for (unsigned int i=0; i& _bounds=NULL): normalize(false), rho(0.0), ref_point(_ref_point), bounds(_bounds){} + /** * calculates and returns the HyperVolume value of a pareto front * @param _set the vector contains all objective Vector of pareto front @@ -130,6 +136,10 @@ class moeoHyperVolumeMetric : public moeoVectorUnaryMetric < ObjectiveVector , d return calc_hypervolume(front, front.size(),ObjectiveVector::Traits::nObjectives()); } + /** + * getter on bounds + * @return bounds + */ std::vector < eoRealInterval > getBounds(){ return bounds; } @@ -335,10 +345,6 @@ class moeoHyperVolumeMetric : public moeoVectorUnaryMetric < ObjectiveVector , d std::vector < eoRealInterval > bounds; ObjectiveVector ref_point; - - - - }; diff --git a/trunk/paradiseo-moeo/src/moeo b/trunk/paradiseo-moeo/src/moeo index 89d6520ad..e74809469 100644 --- a/trunk/paradiseo-moeo/src/moeo +++ b/trunk/paradiseo-moeo/src/moeo @@ -115,6 +115,7 @@ #include #include #include +#include #include