public void RegisterNewGeneration_AnyGeneration_DoNothing() { var target = new TrackingGenerationStrategy(); 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(2, population.Generations.Count); population.CreateNewGeneration(new List <IChromosome>() { new ChromosomeStub(), new ChromosomeStub() }); target.RegisterNewGeneration(population); Assert.AreEqual(3, population.Generations.Count); population.CreateNewGeneration(new List <IChromosome>() { new ChromosomeStub(), new ChromosomeStub() }); target.RegisterNewGeneration(population); Assert.AreEqual(4, population.Generations.Count); }
public void Start_ParallelManyGenerations_Faster() { var selection = new EliteSelection(); var crossover = new OnePointCrossover(2); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var fitness = new FitnessStub() { SupportsParallel = true, ParallelSleep = 1 }; var generationStrategy = new TrackingGenerationStrategy(); var termination = new GenerationNumberTermination(100); // we test linear first var target = new GeneticAlgorithm(new Population(10, 10, chromosome), fitness , selection, crossover, mutation); target.Population.GenerationStrategy = generationStrategy; target.Termination = termination; target.TaskExecutor = new LinearTaskExecutor(); target.Start(); Assert.AreEqual(100, target.Population.Generations.Count); var linearTime = target.TimeEvolving.TotalMilliseconds; //then parallel target = new GeneticAlgorithm(new Population(10, 10, chromosome), fitness , selection, crossover, mutation); target.Population.GenerationStrategy = generationStrategy; target.Termination = termination; target.TaskExecutor = new TplTaskExecutor(); target.Start(); Assert.AreEqual(100, target.Population.Generations.Count); var parallelTime = target.TimeEvolving.TotalMilliseconds; Assert.Less(parallelTime, linearTime); }
public static TrackingGenerationStrategy TrackingStrategy() { TrackingGenerationStrategy strategy = new TrackingGenerationStrategy(); return(strategy); }