X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=src%2Fmutation%2Fmutation.h;h=a35b312b60d637359e7e5d028c79be6bdd5a730e;hb=5e4a04634f1d31d4c774b44184cf08d3faf4d02a;hp=69c23e7fde54c4d47334a806d61299235e71ce15;hpb=7a36adcd1e7cbf19e0823e040f1531b412351cae;p=genetic.git diff --git a/src/mutation/mutation.h b/src/mutation/mutation.h index 69c23e7..a35b312 100644 --- a/src/mutation/mutation.h +++ b/src/mutation/mutation.h @@ -10,35 +10,57 @@ using namespace std; namespace genetic { // namespace mutation { + /** + * Mutations class. Applies mutation on Chromosome's. + */ template < typename _Chromosome> class Mutation { public: + /** + * Type of probability of mutation chance + */ typedef double MutationChanceType; + + /** + * Type representing Chromosome Gene + */ typedef typename _Chromosome::GeneType GeneType; protected: + /** + * Chance with which mutation can occur. (0 = 0%, 1 = 100%) + */ MutationChanceType chance; public: + /** + * Class constructor. Initializes class variables. + * + * @param chance Chance on which Mutation can occur. + */ Mutation(MutationChanceType chance) : chance(chance) { } + /** + * Applies with defined probability mutation on the given generation + * of Chromosome's. + * + * @param _generation Generation for which the mutation should be applied + * @return new Generation of Chromosome's that passed the mutation + */ Generation<_Chromosome> mutate(Generation<_Chromosome> _generation) { - const unsigned int generationSize = _generation.get().size(); - const unsigned int chromosomeSize = _generation.get()[0].get().size(); + const unsigned int generationSize = _generation.size(); + const unsigned int chromosomeSize = _generation[0].size(); vector<_Chromosome> newGeneration; for (unsigned int i = 0; i < generationSize; i++) { MutationChanceType random = (rand() % 10000) / 10000.0; - _Chromosome chromosome = _generation.get()[i]; + _Chromosome chromosome = _generation[i]; if (random < this->chance) { unsigned int mutatedGene = (rand() % chromosomeSize); - vector newChromosome = chromosome.get(); - - newChromosome[mutatedGene] = GeneType(!newChromosome[mutatedGene].get()); - chromosome = _Chromosome(newChromosome); + chromosome[mutatedGene] = GeneType(!chromosome[mutatedGene].get()); } newGeneration.push_back(chromosome); }