/// <summary> /// Constructs a list of permutation mutations operators. /// </summary> /// <param name="mutationOptions">The permutation mutation options.</param> /// <param name="weight">The mutation weight.</param> /// <returns>The constructed permutation mutations operators.</returns> public static List <IMutation> ConstructPermutationMutationOperators(PermutationMutation mutationOptions, double weight = 1) { var mutations = new List <IMutation>(); if ((mutationOptions & PermutationMutation.CyclicShift) == PermutationMutation.CyclicShift) { mutations.Add(new CyclicShiftPermutationMutation(weight)); } if ((mutationOptions & PermutationMutation.Randomization) == PermutationMutation.Randomization) { mutations.Add(new RandomizationPermutationMutation(weight)); } if ((mutationOptions & PermutationMutation.Reverse) == PermutationMutation.Reverse) { mutations.Add(new ReversePermutationMutation(weight)); } if ((mutationOptions & PermutationMutation.Transposition) == PermutationMutation.Transposition) { mutations.Add(new TranspositionMutation(weight)); } if ((mutationOptions & PermutationMutation.Displacement) == PermutationMutation.Displacement) { mutations.Add(new DisplacementMutation(weight)); } if ((mutationOptions & PermutationMutation.Scramble) == PermutationMutation.Scramble) { mutations.Add(new ScramblePermutationMutation(weight)); } if (mutations.Count == 0) { throw new ArgumentException("Error! Invalid permutation mutation selection."); } return(mutations); }
private PermutationChromosome GetMutation(PermutationChromosome chromosome, PermutationMutation mutation) { var rator = GeneticFactory.ConstructPermutationMutationOperators(mutation).First(); return(rator.Invoke(chromosome) as PermutationChromosome); }