public void RunEvolution() { GeneticAlgorithmParameters parameters = new GeneticAlgorithmParameters( populationSize: 10, mutationRate: 0.3, mutationAmplitute: 0.5); //PopulationType specimenType = PopulationType.Arithmetic1D; PopulationType specimenType = PopulationType.Arithmetic15D; PopulationSetting populationSetting; switch (specimenType) { case (PopulationType.Arithmetic1D): populationSetting = new Arithmetic1DPopulation((s) => (Math.Pow(s.Genes[0] - 10, 2) + 5)); break; case (PopulationType.Arithmetic2D): populationSetting = new Arithmetic2DPopulation((s) => (Math.Pow((s.Genes[0] + 2 * s.Genes[1] - 7), 2) + Math.Pow((2 * s.Genes[0] + s.Genes[1] - 5), 2))); break; case (PopulationType.Arithmetic15D): populationSetting = new Arithemtic15DPopulation((s) => GetResultOfFitFunctionForMultidimensionalFucntion(s)); break; default: throw new Exception("Тип особей, для которых запускается симуляция, не задан! Завершение работы..."); } geneticAlgorithm = new GeneticAlgorithm(parameters, populationSetting); for (int i = 0; i < 5000; i++) { geneticAlgorithm.NewGeneration(); //Console.WriteLine(); //Console.WriteLine("Поколение: " + geneticAlgorithm.GenerationNum); //ShowPopulation(geneticAlgorithm.CurrentGeneration); //ShowBestInGeneration(geneticAlgorithm.CurrentGeneration, populationSetting); } ShowBestOfAllTime(geneticAlgorithm.allGenerations, populationSetting); }
/* * write dna */ static void Update() { genericAlgorithm.NewGeneration(); outGene(genericAlgorithm.BestGenes); }