private void InitializeEngine()
        {
            var engineBuidler = new GeneticSearchEngineBuilder(POPULATION_SIZE, GENERATIONS, new CrossoverManager(),
                                                               new PopulationGenerator()).SetCustomChromosomeEvaluator(new ChromosomeEvaluator())
                                .SetEnvironment(new MyEnvironment()).SetMutationProbability(0.01);

            searchRunner1.SetEngineBuilder(engineBuidler);
        }
        public void RequestedChromosomesIsRightWithElite(double elite)
        {
            var searchEngine =
                new GeneticSearchEngineBuilder(POPULATION_SIZE, 50, crossoverManager, populationGenerator)
                .SetElitePercentage(elite)
                .SetSelectionStrategy(new AssertRequestedChromosomesIsRightSelectionWrapper()).Build();

            searchEngine.Next();
        }
        public void SetEngineBuilder(GeneticSearchEngineBuilder engineBuilder)
        {
            this.engineBuilder = engineBuilder;
            lock (shouldPauseLock)
                shouldPause = true;
            Thread.Sleep(200); // Give some time for the search to stop

            InitializeEngine();
            SetButtonsState(EngineState.Puased);
        }
        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);
        }
Beispiel #7
0
        private void InitializeEngine()
        {
            var mutationManager     = new IntUniformMutationManager(0, 100);
            var evaluator           = new BasicEvaluator();
            var populationGenerator =
                new IntVectorChromosomePopulationGenerator(VECTOR_SIZE, 0, 1, mutationManager, evaluator);
            var crossoverManager = new SinglePointCrossoverManager <int>(mutationManager, evaluator);
            var engineBuilder    =
                new GeneticSearchEngineBuilder(POPULATION_SIZE, GENERATION, crossoverManager, populationGenerator)
                .SetMutationProbability(MutationInputBox.GetValue).SetElitePercentage(ElitismInputBox.GetValue);

            searchRunner1.SetEngineBuilder(engineBuilder);
        }
Beispiel #8
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());
            }
        }
Beispiel #9
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");
        }
Beispiel #10
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();
        }