class Mutation {
public:
typedef double MutationChanceType;
+ typedef typename _Chromosome::GeneType GeneType;
protected:
MutationChanceType chance;
for (unsigned int i = 0; i < generationSize; i++) {
MutationChanceType random = (rand() % 10000) / 10000.0;
-// cout << " Mutation chance: " << chance << ", random: " << random << "\n";
- newGeneration.push_back(_generation.get()[i]);
+ _Chromosome chromosome = _generation.get()[i];
if (random < this->chance) {
-// cout << " > Mutated!\n";
- unsigned int which = (rand() % chromosomeSize);
- newGeneration[i].get()[which] = !newGeneration[i].get()[which].get();
+ unsigned int mutatedGene = (rand() % chromosomeSize);
+ vector<GeneType> newChromosome = chromosome.get();
+
+ newChromosome[mutatedGene] = GeneType(!newChromosome[mutatedGene].get());
+
+ chromosome = _Chromosome(newChromosome);
}
+ newGeneration.push_back(chromosome);
}
return Generation<_Chromosome>(newGeneration);
}