Merge branch 'master' of ssh://eodev.git.sourceforge.net/gitroot/eodev/eodev
This commit is contained in:
commit
47cdcb8052
6 changed files with 52 additions and 22 deletions
|
|
@ -29,7 +29,6 @@ Authors:
|
|||
#define _edoRepairerDispatcher_h
|
||||
|
||||
#include <vector>
|
||||
#include <set>
|
||||
#include <utility>
|
||||
|
||||
#include "edoRepairer.h"
|
||||
|
|
@ -52,28 +51,28 @@ template < typename EOT >
|
|||
class edoRepairerDispatcher
|
||||
: public edoRepairer<EOT>,
|
||||
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<unsigned int> idx, edoRepairer<EOT>* op ) :
|
||||
edoRepairerDispatcher( std::vector<unsigned int> idx, edoRepairer<EOT>* 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<unsigned int> idx, edoRepairer<EOT>* op )
|
||||
void add( std::vector<unsigned int> idx, edoRepairer<EOT>* 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
|
||||
|
|
|
|||
|
|
@ -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<EOT> >
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,13 +43,13 @@ int main(void)
|
|||
edoRepairer<EOT>* rep1 = new edoRepairerFloor<EOT>();
|
||||
edoRepairer<EOT>* rep2 = new edoRepairerCeil<EOT>();
|
||||
|
||||
std::set<unsigned int> indexes1;
|
||||
indexes1.insert(0);
|
||||
indexes1.insert(2);
|
||||
std::vector<unsigned int> indexes1;
|
||||
indexes1.push_back(0);
|
||||
indexes1.push_back(2);
|
||||
|
||||
std::set<unsigned int> indexes2;
|
||||
indexes2.insert(1);
|
||||
indexes2.insert(3);
|
||||
std::vector<unsigned int> indexes2;
|
||||
indexes2.push_back(1);
|
||||
indexes2.push_back(3);
|
||||
|
||||
edoRepairerDispatcher<EOT> repare( indexes1, rep1 );
|
||||
repare.add( indexes2, rep2 );
|
||||
|
|
|
|||
Reference in a new issue