/// <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); }
private BinaryChromosome GetMutation(BinaryChromosome chromosome, BinaryMutation mutation) { var rator = GeneticFactory.ConstructBinaryMutationOperators(mutation).First(); return(rator.Invoke(chromosome) as BinaryChromosome); }