From 9787d4d89c44ac97d100f33b26a578268a9483d4 Mon Sep 17 00:00:00 2001 From: Johann Dreo Date: Fri, 7 Jun 2013 12:43:09 +0200 Subject: [PATCH] Generic ObjectiveVector types --- moeo/src/continue/moeoHypContinue.h | 2 +- moeo/src/core/moeoDualRealObjectiveVector.h | 36 +++++++++++++++++-- .../metric/moeoHyperVolumeDifferenceMetric.h | 6 ++-- moeo/src/metric/moeoHyperVolumeMetric.h | 2 +- .../metric/moeoVecVsVecEpsilonBinaryMetric.h | 2 +- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/moeo/src/continue/moeoHypContinue.h b/moeo/src/continue/moeoHypContinue.h index 5fd5c47ad..85be8281e 100644 --- a/moeo/src/continue/moeoHypContinue.h +++ b/moeo/src/continue/moeoHypContinue.h @@ -80,7 +80,7 @@ public: bestCurrentParetoSet.push_back(arch[i].objectiveVector()); } - AtomType hypervolume= metric(bestCurrentParetoSet,OptimSet ); + double hypervolume= metric(bestCurrentParetoSet,OptimSet ); if (hypervolume==0) { eo::log << eo::logging << "STOP in moeoHypContinue: Best ParetoSet has been reached " diff --git a/moeo/src/core/moeoDualRealObjectiveVector.h b/moeo/src/core/moeoDualRealObjectiveVector.h index dbba265c0..ce66ed329 100644 --- a/moeo/src/core/moeoDualRealObjectiveVector.h +++ b/moeo/src/core/moeoDualRealObjectiveVector.h @@ -43,9 +43,9 @@ class moeoDualRealObjectiveVector : public moeoScalarObjectiveVector - ( T(value, false) ) {} + ( T(value, feasible) ) {} bool is_feasible() const { @@ -113,4 +113,36 @@ class moeoDualRealObjectiveVector : public moeoScalarObjectiveVector +std::ostream & operator<<(std::ostream & _os, const moeoDualRealObjectiveVector < ObjectiveVectorTraits > & _objectiveVector) +{ + for (unsigned int i=0; i<_objectiveVector.size()-1; i++) + _os << _objectiveVector[i] << " "; + _os << _objectiveVector[_objectiveVector.size()-1]; + return _os; +} + +/** + * Input for a moeoDualRealObjectiveVector object + * @param _is input stream + * @param _objectiveVector the objective vector to read + */ +template < class ObjectiveVectorTraits > +std::istream & operator>>(std::istream & _is, moeoDualRealObjectiveVector < ObjectiveVectorTraits > & _objectiveVector) +{ + _objectiveVector = moeoDualRealObjectiveVector < ObjectiveVectorTraits > (); + for (unsigned int i=0; i<_objectiveVector.size(); i++) + { + _is >> _objectiveVector[i]; + } + return _is; +} + + #endif /*_DUALREALOBJECTIVEVECTOR_H_*/ diff --git a/moeo/src/metric/moeoHyperVolumeDifferenceMetric.h b/moeo/src/metric/moeoHyperVolumeDifferenceMetric.h index 906923b98..296da1733 100644 --- a/moeo/src/metric/moeoHyperVolumeDifferenceMetric.h +++ b/moeo/src/metric/moeoHyperVolumeDifferenceMetric.h @@ -56,7 +56,7 @@ class moeoHyperVolumeDifferenceMetric : public moeoVectorVsVectorBinaryMetric < * @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){ + 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 argument1: vector size must be greater than 0"); else{ - double min, max; + typename ObjectiveVector::Type min, max; unsigned int nbObj=ObjectiveVector::Traits::nObjectives(); bounds.resize(nbObj); for (unsigned int i=0; i & _set1, const std::vector < ObjectiveVector > & _set2){ - double min, max; + typename ObjectiveVector::Type min, max; unsigned int nbObj=ObjectiveVector::Traits::nObjectives(); bounds.resize(nbObj); for (unsigned int i=0; i