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.
+ */
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();