NDSorting: changed exact ranking values to make check for front easier

eoRNG: changed nothing (did some debugging)
This commit is contained in:
maartenkeijzer 2001-03-26 10:09:40 +00:00
commit ebca71e228
2 changed files with 49 additions and 35 deletions

View file

@ -119,6 +119,8 @@ class eoNDSorting : public eoPerf2WorthCached<EOT, double>
} }
} }
unsigned first_front_size = current_front.size();
vector<unsigned> next_front; vector<unsigned> next_front;
next_front.reserve(_pop.size()); next_front.reserve(_pop.size());
@ -165,11 +167,21 @@ class eoNDSorting : public eoPerf2WorthCached<EOT, double>
// now all that's left to do is to transform lower rank into higher worth // now all that's left to do is to transform lower rank into higher worth
double max_fitness = *std::max_element(value().begin(), value().end()); double max_fitness = *std::max_element(value().begin(), value().end());
// but make sure it's an integer upper bound, so that all ranks inside the highest integer are the front
max_fitness = ceil(max_fitness);
unsigned nfirst = 0;
for (unsigned i = 0; i < value().size(); ++i) for (unsigned i = 0; i < value().size(); ++i)
{ {
value()[i] = max_fitness - value()[i]; value()[i] = max_fitness - value()[i];
assert(n[i] == 0); assert(n[i] == 0);
if (value()[i] > (max_fitness-1)) // this would be the test for 'front_ness'
nfirst++;
} }
assert(nfirst == first_front_size);
} }
}; };

View file

@ -259,6 +259,7 @@ private :
uint32* next; uint32* next;
int left; int left;
// for normal distribution
bool cached; bool cached;
float cacheValue; float cacheValue;
@ -266,6 +267,7 @@ private :
const int M; const int M;
const uint32 K; // a magic constant const uint32 K; // a magic constant
/** /**
Private copy ctor and assignment operator to make sure that Private copy ctor and assignment operator to make sure that
nobody accidentally copies the random number generator. nobody accidentally copies the random number generator.
@ -373,9 +375,9 @@ inline uint32 eoRng::restart(void)
return(s1 ^ (s1 >> 18)); return(s1 ^ (s1 >> 18));
} }
inline uint32 eoRng::rand(void) inline uint32 eoRng::rand(void)
{ {
uint32 y; uint32 y;
if(--left < 0) if(--left < 0)