Exemplo n.º 1
0
        public void Present()
        {
            var orchestrator = new TspOrchestrator()
                               .WithBadGenerationsLimit(5000)
                               .WithPopulationSize(50)
                               .WithCrossoverRate(0.9)
                               .WithMutationRate(0.05)
                               .WithCrossover(new TspCrossover());
            var builder = new TspWinnerBuilder(orchestrator as TspOrchestrator);

            var numberOfExecutions = 30;
            var accumulated        = 0d;
            var values             = new List <TspChromosome>();

            var           minimumDistance = double.MaxValue;
            var           maximumDistance = double.MinValue;
            TspChromosome worstEver       = null;
            TspChromosome bestEver        = null;

            for (var i = 1; i <= numberOfExecutions; i++)
            {
                var bestPath         = builder.Build();
                var bestPathDistance = bestPath.GetTravelDistance();

                accumulated += bestPathDistance;

                values.Add(bestPath);

                if (bestPathDistance < minimumDistance)
                {
                    minimumDistance = bestPathDistance;
                    bestEver        = bestPath;
                }

                if (bestPathDistance > maximumDistance)
                {
                    maximumDistance = bestPathDistance;
                    worstEver       = bestPath;
                }
            }

            var average = accumulated / numberOfExecutions;

            Console.WriteLine($"Genetic minimum path found {minimumDistance}: \n\t{bestEver.GetPath()}");
            Console.WriteLine($"Genetic maximum path found {maximumDistance}: \n\t{worstEver.GetPath()}");
            Console.WriteLine($"Genetic average path: {average}");

            var deviation = Math.Sqrt(values.Sum(x => Math.Pow(x.GetTravelDistance() - average, 2)) / (numberOfExecutions - 1));

            Console.WriteLine($"Genetic path standard deviation for: {deviation}");
            Console.WriteLine("---------------------");
        }
 public TspWinnerBuilder(TspOrchestrator orchestrator)
 {
     this.orchestrator = orchestrator;
 }