public static AbstractMutation ChosenMutationMethod(MutationMethod mutationMethod, double MutationProbability, int pointMutation) { AbstractMutation mutation = null; switch (mutationMethod) { case MutationMethod.InversionMutation: mutation = new InversionMutation(MutationProbability, pointMutation); break; case MutationMethod.ReplaceMutation: mutation = new ReplaceMutaion(MutationProbability, pointMutation); break; case MutationMethod.SwapMutation: mutation = new SwapMutation(MutationProbability, pointMutation); break; case MutationMethod.TranslocationMutation: mutation = new TranslocationMutation(MutationProbability, pointMutation); break; case MutationMethod.NonMutation: mutation = null; break; } return(mutation); }
/// <summary> /// Мутация при которой все особоби, кроме самой лучшей мутируют /// (мутируют около 1/3 битов). /// </summary> /// <param name="population">Популяция.</param> private void CatacliysmicMutation(Population population) { Chromosome bestChromosome = population.BestChromosome(); int bitsMutation = (int)(population.SizeChromosome * 0.7); AbstractMutation mutation = GeneticMethod.ChosenMutationMethod(mutationMethod, 100, bitsMutation); foreach (var chromosome in population.populationList) { if (!chromosome.Equals(bestChromosome)) { mutation.Mutation(chromosome); } } }