public void RegisterNewGeneration_GenerationExceedGenerationsNumber_RemoveOldOne() { var target = new PerformanceGenerationStrategy(); var population = new Population(2, 6, new ChromosomeStub()); population.CreateInitialGeneration(); target.RegisterNewGeneration(population); Assert.AreEqual(1, population.Generations.Count); population.CreateNewGeneration(new List <IChromosome>() { new ChromosomeStub(), new ChromosomeStub() }); target.RegisterNewGeneration(population); Assert.AreEqual(1, population.Generations.Count); population.CreateNewGeneration(new List <IChromosome>() { new ChromosomeStub(), new ChromosomeStub() }); target.RegisterNewGeneration(population); Assert.AreEqual(1, population.Generations.Count); population.CreateNewGeneration(new List <IChromosome>() { new ChromosomeStub(), new ChromosomeStub() }); target.RegisterNewGeneration(population); Assert.AreEqual(1, population.Generations.Count); }
public static Population GeneratePopulation(int size, object chromosome) { var defaultPerformance = new PerformanceGenerationStrategy(10); if (chromosome is BinaryChromosome) { return(GeneratePopulation(size, (BinaryChromosome)chromosome, defaultPerformance)); } if (chromosome is CombinatorialChromosome) { return(GeneratePopulation(size, (CombinatorialChromosome)chromosome, defaultPerformance)); } if (chromosome is DoubleChromosome) { return(GeneratePopulation(size, (DoubleChromosome)chromosome, defaultPerformance)); } return(null); }
/// <summary> /// Initializes a new instance of the <see cref="GeneticSharp.Domain.Populations.Population"/> class. /// </summary> /// <param name="minSize">The minimum size (chromosomes).</param> /// <param name="maxSize">The maximum size (chromosomes).</param> /// <param name="adamChromosome">The original chromosome of all population ;).</param> public GeneticDietPopulation(int minSize, int maxSize, IChromosome adamChromosome) { if (minSize < 2) { throw new ArgumentOutOfRangeException("minSize", "The minimum size for a population is 2 chromosomes."); } if (maxSize < minSize) { throw new ArgumentOutOfRangeException("maxSize", "The maximum size for a population should be equal or greater than minimum size."); } ExceptionHelper.ThrowIfNull("adamChromosome", adamChromosome); CreationDate = DateTime.Now; MinSize = minSize; MaxSize = maxSize; AdamChromosome = adamChromosome; Generations = new List <Generation>(); GenerationStrategy = new PerformanceGenerationStrategy(10); }
public Test UseAlgorithm(List <int> oblasti, List <double> zastupljenost, int Test_Length) { Random r = new Random(10); IDataAccess dataAccess = DataAccess.DataAccess.GetInstance(); List <Question> qs = new List <Question>(); for (int i = 0; i < Test_Length; i++) { qs.Add(dataAccess.GetQuestionById(1 + r.Next(1000))); } Test adamTest = new Test(qs, Test_Length); List <double> zastupljenost_kao_br_pitanja = new List <double>(); foreach (var vrednost in zastupljenost) { zastupljenost_kao_br_pitanja.Add(Math.Round(vrednost * Test_Length + 0.01)); } var fitness = new TestFitness(oblasti, zastupljenost_kao_br_pitanja, 0); IGenerationStrategy generationStrategy = new PerformanceGenerationStrategy(3); var population = new TestPopulation(20, 50, adamTest, oblasti) { GenerationStrategy = generationStrategy }; ISelection selection = new EliteSelection(); ICrossover crossover = new TestCrossover(oblasti, zastupljenost_kao_br_pitanja, 8, 4); IMutation mutation = new TestMutation(oblasti, zastupljenost_kao_br_pitanja); ITermination termination = new OrTermination(new ITermination[] { new TestTermination(100, oblasti), new FitnessThresholdTermination(oblasti.Count), new GenerationNumberTermination(3000) }); GeneticAlgorithm ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = termination, CrossoverProbability = 1f, MutationProbability = 0.7f }; double oldFitness = 0; List <Test> tests = new List <Test>(); //Callback ga.GenerationRan += (sender, arg) => { if (ga.BestChromosome.Fitness >= oldFitness) { oldFitness = ga.BestChromosome.Fitness.Value; tests.Add(ga.BestChromosome as Test); //Console.WriteLine($"Current fitness: {ga.BestChromosome.Fitness} for generation : {ga.GenerationsNumber}"); } }; ga.Start(); if (oldFitness == 0) { return(null); } var lista = tests.Where(x => !x.HasDuplicate()).OrderByDescending(x => x.Fitness.Value).ToList(); Test bestChromosome = lista.FirstOrDefault(); foreach (var q in bestChromosome.questions) { q.Izabrano = true; } return(bestChromosome); }
public static PerformanceGenerationStrategy PerformanceStrategy(int maxGenerations = 10) { PerformanceGenerationStrategy strategy = new PerformanceGenerationStrategy(maxGenerations); return(strategy); }