Description
std::pair<const Gene*, const Gene*> fitnessProportionalSelection () const {
// TODO: Dunno why this won't work for subtract the fitness
// This is working well for int type gene...
// std::uniform_real_distribution<> dis(0.0, totalFitness - minFitness * populationSize);
std::uniform_real_distribution<> dis (0.0 , totalFitness);
double rnd1 = dis (gen);
double rnd2 = dis (gen);
const Gene* parent1 = nullptr ;
const Gene* parent2 = nullptr ;
double accumulatedFitness = 0.0 ;
for (const auto & individual : individuals) {
accumulatedFitness += individual->getFitness ();
// TODO: Fix this later....
// It return nullptr for parent...
// accumulatedFitness -= minFitness;
if (parent1 == nullptr && accumulatedFitness >= rnd1) {
parent1 = individual.get ();
}
if (parent2 == nullptr && accumulatedFitness >= rnd2) {
parent2 = individual.get ();
}
if (parent1 != nullptr && parent2 != nullptr ) {
break ;
}
}
return {parent1, parent2};
}
Reactions are currently unavailable
You can’t perform that action at this time.
Evolutionary-Computing/main.cpp
Lines 511 to 538 in ce3d063