1 #ifndef __MUTATION_MUTATION_H
2 #define __MUTATION_MUTATION_H
6 #include "chromosome.h"
7 #include "generation.h"
12 // namespace mutation {
13 template < typename _Chromosome>
16 typedef double MutationChanceType;
17 typedef typename _Chromosome::GeneType GeneType;
19 MutationChanceType chance;
22 Mutation(MutationChanceType chance) :
26 Generation<_Chromosome> mutate(Generation<_Chromosome> _generation) {
27 const unsigned int generationSize = _generation.get().size();
28 const unsigned int chromosomeSize = _generation.get()[0].get().size();
29 vector<_Chromosome> newGeneration;
31 for (unsigned int i = 0; i < generationSize; i++) {
32 MutationChanceType random = (rand() % 10000) / 10000.0;
34 _Chromosome chromosome = _generation.get()[i];
35 if (random < this->chance) {
36 unsigned int mutatedGene = (rand() % chromosomeSize);
37 vector<GeneType> newChromosome = chromosome.get();
39 newChromosome[mutatedGene] = GeneType(!newChromosome[mutatedGene].get());
41 chromosome = _Chromosome(newChromosome);
43 newGeneration.push_back(chromosome);
45 return Generation<_Chromosome>(newGeneration);
51 #endif /* __MUTATION_MUTATION_H */