bugfix: do not allow null interval in hypervolume diff metric

This commit is contained in:
Johann Dreo 2013-06-06 11:43:34 +02:00 committed by LPTK
commit 7d78b3b2ad
2 changed files with 17 additions and 3 deletions

View file

@ -234,7 +234,7 @@ public :
assert( repRange >= 0 ); assert( repRange >= 0 );
#ifndef NDEBUG #ifndef NDEBUG
if( repRange == 0 ) { if( repRange == 0 ) {
eo::log << eo::warnings << "Null range in eoRealBounds (min=" << _min << ", max=" << _max << ")" << std::endl; eo::log << eo::warnings << "Warning: null range in eoRealBounds (min=" << _min << ", max=" << _max << ")" << std::endl;
} }
#endif #endif
} }

View file

@ -163,10 +163,24 @@ class moeoHyperVolumeDifferenceMetric : public moeoVectorVsVectorBinaryMetric <
min = std::min(min, _set2[j][i]); min = std::min(min, _set2[j][i]);
max = std::max(max, _set2[j][i]); max = std::max(max, _set2[j][i]);
} }
if( min == max ) {
bounds[i] = eoRealInterval(min-tiny(), max+tiny());
} else {
bounds[i] = eoRealInterval(min, max); bounds[i] = eoRealInterval(min, max);
} }
} }
} }
}
protected:
/**
* Returns a very small value that can be used to avoid extreme cases (where the min bound == the max bound)
*/
static double tiny()
{
return 1e-6;
}
private: private: