コード例 #1
0
        public void Evolve_ManyGenerations_Fast()
        {
            var selection        = new EliteSelection();
            var crossover        = new UniformCrossover();
            var mutation         = new UniformMutation(true);
            var chromosome       = new AutoConfigChromosome();
            var targetChromosome = new TspChromosome(10);
            var targetFitness    = new TspFitness(10, 0, 100, 0, 100);
            var fitness          = new AutoConfigFitness(targetFitness, targetChromosome);

            fitness.PopulationMinSize = 20;
            fitness.PopulationMaxSize = 20;
            fitness.Termination       = new TimeEvolvingTermination(TimeSpan.FromSeconds(5));

            var population = new Population(10, 10, chromosome);

            var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation);

            ga.TaskExecutor = new SmartThreadPoolTaskExecutor()
            {
                MinThreads = 10,
                MaxThreads = 20
            };

            ga.Termination = new GenerationNumberTermination(2);
            ga.Start();

            Assert.NotNull(ga.BestChromosome);
        }
コード例 #2
0
        public void Evolve_ManyGenerations_Fast()
        {
            var selection = new EliteSelection();
            var crossover = new UniformCrossover();
            var mutation = new UniformMutation(true);
            var chromosome = new AutoConfigChromosome();
            var targetChromosome = new TspChromosome(10);
            var targetFitness = new TspFitness(10, 0, 100, 0, 100);            
            var fitness = new AutoConfigFitness(targetFitness, targetChromosome);
            fitness.PopulationMinSize = 20;
            fitness.PopulationMaxSize = 20;
            fitness.Termination = new TimeEvolvingTermination(TimeSpan.FromSeconds(5));
            
            var population = new Population(10, 10, chromosome);

            var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation);
            
            ga.TaskExecutor = new SmartThreadPoolTaskExecutor()
            {
                MinThreads = 10,
                MaxThreads = 20
            };        

            ga.Termination = new GenerationNumberTermination(2);
            ga.Start();

            Assert.NotNull(ga.BestChromosome);            
        }
コード例 #3
0
        public void GenerateGene_InvalidIndex_Exception()
        {
            var target = new AutoConfigChromosome();

            var actual = Assert.Catch(() => target.GenerateGene(9));

            Assert.AreEqual("Invalid AutoConfigChromosome gene index.", actual.Message);
        }
コード例 #4
0
        public void Evaluate_StartFailed_ZeroFitness()
        {
            var chromosome       = new AutoConfigChromosome();
            var targetChromosome = Substitute.For <IChromosome>();

            targetChromosome.CreateNew().Returns(x => throw new Exception("TEST"));

            var targetFitness = new TspFitness(10, 0, 100, 0, 100);
            var target        = new AutoConfigFitness(targetFitness, targetChromosome);

            var actual = target.Evaluate(chromosome);

            Assert.AreEqual(0, actual);
        }
コード例 #5
0
        public void Evaluate_StartOk_Fitness()
        {
            var chromosome       = new AutoConfigChromosome();
            var targetChromosome = new TspChromosome(10);

            var targetFitness = new TspFitness(10, 0, 100, 0, 100);
            var target        = new AutoConfigFitness(targetFitness, targetChromosome);

            target.PopulationMinSize = 20;
            target.PopulationMaxSize = 20;
            target.Termination       = new FitnessThresholdTermination(0.1f);

            var actual = target.Evaluate(chromosome);

            Assert.AreNotEqual(0, actual);
        }