コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        public static TrackingGenerationStrategy TrackingStrategy()
        {
            TrackingGenerationStrategy strategy = new TrackingGenerationStrategy();

            return(strategy);
        }