diff --git a/edo/src/edoRepairerDispatcher.h b/edo/src/edoRepairerDispatcher.h index 96c07da5..5c4aa7d8 100644 --- a/edo/src/edoRepairerDispatcher.h +++ b/edo/src/edoRepairerDispatcher.h @@ -29,7 +29,6 @@ Authors: #define _edoRepairerDispatcher_h #include -#include #include #include "edoRepairer.h" @@ -52,28 +51,28 @@ template < typename EOT > class edoRepairerDispatcher : public edoRepairer, std::vector< - std::pair< std::set< unsigned int >, edoRepairer< EOT >* > + std::pair< std::vector< unsigned int >, edoRepairer< EOT >* > > { public: //! Empty constructor edoRepairerDispatcher() : std::vector< - std::pair< std::set< unsigned int >, edoRepairer< EOT >* > + std::pair< std::vector< unsigned int >, edoRepairer< EOT >* > >() {} //! Constructor with a single index set and repairer operator - edoRepairerDispatcher( std::set idx, edoRepairer* op ) : + edoRepairerDispatcher( std::vector idx, edoRepairer* op ) : std::vector< - std::pair< std::set< unsigned int >, edoRepairer< EOT >* > + std::pair< std::vector< unsigned int >, edoRepairer< EOT >* > >() { this->add( idx, op ); } //! Add more indexes set and their corresponding repairer operator address to the list - void add( std::set idx, edoRepairer* op ) + void add( std::vector idx, edoRepairer* op ) { assert( idx.size() > 0 ); assert( op != NULL ); @@ -90,7 +89,7 @@ public: EOT partsol; // j is an iterator that points on an uint - for( std::set< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) { + for( std::vector< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) { partsol.push_back( sol.at(*j) ); } // for j @@ -101,9 +100,9 @@ public: (*(ipair->second))( partsol ); { // copy back the repaired partial solution to sol - // browse partsol with uint k, and the idx set with an iterator (std::set is an associative tab) + // browse partsol with uint k, and the idx set with an iterator (std::vector is an associative tab) unsigned int k=0; - for( std::set< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) { + for( std::vector< unsigned int >::iterator j = ipair->first.begin(); j != ipair->first.end(); ++j ) { sol[ *j ] = partsol[ k ]; k++; } // for j diff --git a/edo/src/edoSamplerUniform.h b/edo/src/edoSamplerUniform.h index 44a59ea8..4edf4323 100644 --- a/edo/src/edoSamplerUniform.h +++ b/edo/src/edoSamplerUniform.h @@ -37,6 +37,12 @@ Authors: * edoSamplerUniform * This class uses the Uniform distribution parameters (bounds) to return * a random position used for population sampling. + * + * Returns a random number in [min,max[ for each variable defined by the given + * distribution. + * + * Note: if the distribution given at call defines a min==max for one of the + * variable, the result will be the same number. */ template < typename EOT, class D = edoUniform > class edoSamplerUniform : public edoSampler< D > @@ -58,12 +64,15 @@ public: // Sampling all dimensions for (unsigned int i = 0; i < size; ++i) - { + { double min = distrib.min()[i]; double max = distrib.max()[i]; double random = rng.uniform(min, max); + + assert( ( min == random && random == max ) || ( min <= random && random < max) ); // random in [ min, max [ + solution.push_back(random); - } + } return solution; } diff --git a/edo/test/t-dispatcher-round.cpp b/edo/test/t-dispatcher-round.cpp index 245a2e2c..89fc1644 100644 --- a/edo/test/t-dispatcher-round.cpp +++ b/edo/test/t-dispatcher-round.cpp @@ -43,13 +43,13 @@ int main(void) edoRepairer* rep1 = new edoRepairerFloor(); edoRepairer* rep2 = new edoRepairerCeil(); - std::set indexes1; - indexes1.insert(0); - indexes1.insert(2); + std::vector indexes1; + indexes1.push_back(0); + indexes1.push_back(2); - std::set indexes2; - indexes2.insert(1); - indexes2.insert(3); + std::vector indexes2; + indexes2.push_back(1); + indexes2.push_back(3); edoRepairerDispatcher repare( indexes1, rep1 ); repare.add( indexes2, rep2 ); diff --git a/eo/src/eoEvalUserTimeThrowException.h b/eo/src/eoEvalUserTimeThrowException.h index 5d1f4c8a..87e47ac5 100644 --- a/eo/src/eoEvalUserTimeThrowException.h +++ b/eo/src/eoEvalUserTimeThrowException.h @@ -21,6 +21,13 @@ Authors: Johann Dréo */ +#ifndef __unix__ +#warning "Warning: class 'eoEvalUserTimeThrowException' is only available under UNIX systems (defining 'rusage' in 'sys/resource.h'), contributions for other systems are welcomed." +#else + +#ifndef __EOEVALUSERTIMETHROWEXCEPTION_H__ +#define __EOEVALUSERTIMETHROWEXCEPTION_H__ + #include #include @@ -60,3 +67,6 @@ protected: const long _max; struct rusage _usage; }; + +#endif // __EOEVALUSERTIMETHROWEXCEPTION_H__ +#endif // __UNIX__ diff --git a/eo/src/eoScalarFitness.h b/eo/src/eoScalarFitness.h index f3a3a4bb..31a9dbff 100644 --- a/eo/src/eoScalarFitness.h +++ b/eo/src/eoScalarFitness.h @@ -34,11 +34,16 @@ */ /** - * eoScalarFitness >: * Wraps a scalar fitness values such as a double or int, with the option of * maximizing (using less) or minimizing (using greater) - - * It overrides operator<() to use the Compare template argument + * + * It overrides operator<() to use the Compare template argument. Thus, if you + * need to compare if an indiv1 is "better" than an indiv2, you can use: + * if( indiv1 > indiv2 ) { + * // indiv1 is better + * } else { + * // indiv2 is better + * } * * Suitable constructors and assignments and casts are defined to work * with this quantity as if it were a ScalarType. @@ -57,6 +62,13 @@ class eoScalarFitness eoScalarFitness& operator=(const ScalarType& v) { value = v; return *this; } + /** Conversion operator: it permits to use a fitness instance as its scalar + * type, if needed. For example, this is possible: + * eoScalarFitness > fit; + * double val = 1.0; + * fit = val; + * val = fit; + */ operator ScalarType(void) const { return value; } /// Comparison, using less by default @@ -83,13 +95,13 @@ class eoScalarFitness * */ + /** Typedefs for fitness comparison, Maximizing Fitness compares with less, and minimizing fitness compares with greater. This because we want ordinary fitness values (doubles) to be equivalent with Maximizing Fitness, and comparing with less is the default behaviour. */ - #if defined(__CUDACC__) typedef eoScalarFitness > eoMaximizingFitness; typedef eoScalarFitness > eoMinimizingFitness; diff --git a/eo/src/utils/eoParser.cpp b/eo/src/utils/eoParser.cpp index e97a2a2e..fc1068b3 100644 --- a/eo/src/utils/eoParser.cpp +++ b/eo/src/utils/eoParser.cpp @@ -289,7 +289,7 @@ void eoParser::printOn(ostream& os) const string str = "--" + param->longName() + "=" + param->getValue(); os.setf(ios_base::left, ios_base::adjustfield); - os << setw(40) << str; + os << setfill(' ') << setw(40) << str; os << setw(0) << " # "; if (param->shortName())