Пример #1
0
        /// <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);
        }