public void BasicTest(RunType runType)
        {
            var searchEngine =
                new GeneticSearchEngineBuilder(POPULATION_SIZE, 50, crossoverManager, populationGenerator)
                .SetSelectionStrategy(new AssertRequestedChromosomesIsRightSelectionWrapper()).Build();

            var result = searchEngine.Run(runType);

            Assert.AreEqual(VECTOR_SIZE, result.BestChromosome.Evaluate());
            Assert.AreEqual(50, result.Generations, "Wrong number of generations");
        }
        public void MutationTest(RunType runType)
        {
            var searchEngine =
                new GeneticSearchEngineBuilder(POPULATION_SIZE, 50, crossoverManager, populationGenerator)
                .SetSelectionStrategy(new AssertRequestedChromosomesIsRightSelectionWrapper())
                .SetMutationProbability(0.1).IncludeAllHistory().Build();

            var result = searchEngine.Run(runType);

            Assert.IsTrue(VECTOR_SIZE < result.BestChromosome.Evaluate(),
                          $"best result ({result.BestChromosome.Evaluate()}) should have been greater than {VECTOR_SIZE}. Chromosome is {result.BestChromosome}");
        }
        public void Banchmark()
        {
            var crossoverManager = A.Fake <ICrossoverManager>();

            A.CallTo(() => crossoverManager.Crossover(A <IChromosome> ._, A <IChromosome> ._))
            .ReturnsLazily(delegate(IChromosome c1, IChromosome c2) { Thread.Sleep(SLEEP_TIME); return(c1); });

            var engine = new GeneticSearchEngineBuilder(POPULATION_SIZE, MAX_GENERATIONS, crossoverManager,
                                                        new SlowPopulationGenerator(SLEEP_TIME)).Build();
            var result = engine.Run();

            Console.WriteLine("Total time: " + result.SearchTime);
        }
示例#4
0
        public void NagitiveEvaluation_ThrowException()
        {
            try
            {
                var chromosme = A.Fake <IChromosome>();
                A.CallTo(() => chromosme.Evaluate()).Returns(-1);
                var populationGenerator = A.Fake <IPopulationGenerator>();
                A.CallTo(() => populationGenerator.GeneratePopulation(A <int> ._))
                .Returns(new[] { chromosme });

                var engine = new GeneticSearchEngineBuilder(1, 2, A.Fake <ICrossoverManager>(), populationGenerator)
                             .Build();
                engine.Run();
                Assert.Fail("Should have thrown an exception by now");
            }
            catch (AggregateException e)
            {
                Assert.AreEqual(typeof(NegativeEvaluationException), e.InnerExceptions.First().GetType());
            }
        }
示例#5
0
        public void BedPopulationRenewalPercantage_ThrowException(double percantage)
        {
            var chromosme = A.Fake <IChromosome>();

            A.CallTo(() => chromosme.Evaluate()).Returns(1);
            var populationGenerator = A.Fake <IPopulationGenerator>();

            A.CallTo(() => populationGenerator.GeneratePopulation(A <int> ._))
            .Returns(new[] { chromosme });

            var populationRenewalManager = A.Fake <IPopulationRenwalManager>();

            A.CallTo(() => populationRenewalManager.ShouldRenew(A <Population> ._, A <IEnvironment> ._, A <int> ._))
            .Returns(percantage);
            var engine =
                new GeneticSearchEngineBuilder(1, 2, A.Fake <ICrossoverManager>(), populationGenerator)
                .AddPopulationRenwalManager(populationRenewalManager)
                .Build();

            engine.Run();
            Assert.Fail("Should have thrown an exception by now");
        }
示例#6
0
        static void Main(string[] args)
        {
            Console.WriteLine("Started!");

            IMutationManager <string> mutationManager = new ExchangeMutationManager <string>();
            IEvaluator           evaluator            = new DistanceEvaluator(locations);
            ICrossoverManager    crossoverManager     = new OrderCrossover <string>(mutationManager, evaluator);
            IPopulationGenerator populationGenerator  =
                new AllElementsVectorChromosomePopulationGenerator <string>(cities, mutationManager, evaluator);

            GeneticSearchEngine engine =
                new GeneticSearchEngineBuilder(POPULATION_SIZE, GENERATIONS, crossoverManager, populationGenerator)
                .SetMutationProbability(0.1).SetElitePercentage(0.02).Build();

            engine.OnNewGeneration += (Population p, IEnvironment e) => PrintBestChromosome(p);

            GeneticSearchResult result = engine.Run();

            Console.WriteLine("Finished!");
            Console.WriteLine(result.BestChromosome + ": " + distanceCalclator.GetDistance(result.BestChromosome));

            Console.ReadLine();
        }