コード例 #1
0
        /// <summary>
        /// Constructs a list of binary mutations operators.
        /// </summary>
        /// <param name="mutationOptions">The binary mutation options.</param>
        /// <param name="weight">The mutation weight.</param>
        /// <returns>The constructed binary mutations operators.</returns>
        public static List <IMutation> ConstructBinaryMutationOperators(BinaryMutation mutationOptions, double weight = 1)
        {
            var mutations = new List <IMutation>();

            if ((mutationOptions & BinaryMutation.CyclicShift) == BinaryMutation.CyclicShift)
            {
                mutations.Add(new CyclicShiftBinaryMutation(weight));
            }
            if ((mutationOptions & BinaryMutation.Randomization) == BinaryMutation.Randomization)
            {
                mutations.Add(new RandomizationBinaryMutation(weight));
            }
            if ((mutationOptions & BinaryMutation.Reverse) == BinaryMutation.Reverse)
            {
                mutations.Add(new ReverseBinaryMutation(weight));
            }
            if ((mutationOptions & BinaryMutation.FlipBit) == BinaryMutation.FlipBit)
            {
                mutations.Add(new FlipBitMutation(weight));
            }
            if ((mutationOptions & BinaryMutation.SingleBit) == BinaryMutation.SingleBit)
            {
                mutations.Add(new SingleBitMutation(weight));
            }
            if ((mutationOptions & BinaryMutation.Scramble) == BinaryMutation.Scramble)
            {
                mutations.Add(new ScrambleBinaryMutation(weight));
            }
            if (mutations.Count == 0)
            {
                throw new ArgumentException("Error! Invalid binary mutation selection.");
            }

            return(mutations);
        }
コード例 #2
0
        private BinaryChromosome GetMutation(BinaryChromosome chromosome, BinaryMutation mutation)
        {
            var rator = GeneticFactory.ConstructBinaryMutationOperators(mutation).First();

            return(rator.Invoke(chromosome) as BinaryChromosome);
        }