diff --git a/moeo/src/metric/moeoDualHyperVolumeDifferenceMetric.h b/moeo/src/metric/moeoDualHyperVolumeDifferenceMetric.h index b7774bb51..9cea4fd76 100644 --- a/moeo/src/metric/moeoDualHyperVolumeDifferenceMetric.h +++ b/moeo/src/metric/moeoDualHyperVolumeDifferenceMetric.h @@ -34,6 +34,7 @@ class moeoDualHyperVolumeDifferenceMetric : public moeoHyperVolumeDifferenceMetr { protected: using moeoHyperVolumeDifferenceMetric::rho; + using moeoHyperVolumeDifferenceMetric::tiny; using moeoHyperVolumeDifferenceMetric::normalize; using moeoHyperVolumeDifferenceMetric::ref_point; using moeoHyperVolumeDifferenceMetric::bounds; @@ -54,6 +55,60 @@ public: } + + /** + * method calculate bounds for the normalization + * @param _set1 the vector contains all objective Vector of the first pareto front + * @param _set2 the vector contains all objective Vector of the second pareto front + */ + void setup(const std::vector < ObjectiveVector > & _set1, const std::vector < ObjectiveVector > & _set2) + { + typename ObjectiveVector::Type::Compare cmp; + + if(_set1.size() < 1 || _set2.size() < 1) { + throw("Error in moeoHyperVolumeUnaryMetric::setup -> argument1: vector size must be greater than 0"); + } else { +#ifndef NDEBUG + if( _set1.size() == 1 || _set2.size() == 1 ) { + eo::log << eo::warnings << "Warning in moeoHyperVolumeUnaryMetric::setup one of the pareto set contains only one point (set1.size=" + << _set1.size() << ", set2.size=" << _set2.size() << ")" + << std::endl; + } +#endif + + typename ObjectiveVector::Type worst, best; + unsigned int nbObj=ObjectiveVector::Traits::nObjectives(); + bounds.resize(nbObj); + for (unsigned int i=0; i= 1 + } + /** * calculates and returns the HyperVolume value of a pareto front * @param _set1 the vector contains all objective Vector of the first pareto front