Exemplo n.º 1
0
        private void InitializeGeneticAlgorithm()
        {
            fitnessFunction           = new FitnessFunction(cities);
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));
            elitistSelection          = new ElitistSelection();
            crossoverOperator         = GetSelectedCrossoverOperator();
            mutationOperator          = GetSelectedMutationOperator();
            initialPopulationProvider = new InitialPopulationProvider();

            settings = new Settings
            {
                Cities         = cities,
                NumberOfElites = Convert.ToInt32(inputElites.Value),
                PopulationSize = Convert.ToInt32(inputMaxPopulation.Value),
                CrossoverRate  = Convert.ToDouble(inputCrossoverRate.Value),
                MutationRate   = Convert.ToDouble(inputMutationRate.Value)
            };

            selectionOperator = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));

            geneticAlgorithm = new GeneticAlgorithm(settings, initialPopulationProvider, fitnessFunction, selectionOperator, elitistSelection, crossoverOperator, mutationOperator);

            generationsPlotData  = new List <double>();
            averageScorePlotData = new List <double>();
            bestScorePlotData    = new List <double>();
            UpdatePlotData();
            Plot();
            DrawSolution(geneticAlgorithm.CurrentBestSolution, panelBestSolution, bestSolutionGraphics);

            buttonNextGeneration.Enabled = true;
            buttonRun.Enabled            = true;
            buttonReset.Enabled          = true;
        }
Exemplo n.º 2
0
        private void InitializeGeneticAlgorithm()
        {
            fitnessFunction           = new FitnessFunction(inventory);
            selectionOperator         = new RouletteWheelSelection();
            elitistSelection          = new ElitistSelection();
            crossoverOperator         = new ContinuousUniformCrossover();
            mutationOperator          = new WeightsMutation();
            initialPopulationProvider = new InitialPopulationProvider();

            settings = new Settings
            {
                Inventory         = inventory,
                NumberOfCriterias = 3,
                NumberOfElites    = Convert.ToInt32(inputElites.Value),
                PopulationSize    = Convert.ToInt32(inputMaxPopulation.Value),
                CrossoverRate     = Convert.ToDouble(inputCrossoverRate.Value),
                MutationRate      = Convert.ToDouble(inputMutationRate.Value)
            };

            selectionOperator = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));

            geneticAlgorithm = new GeneticAlgorithm(settings, initialPopulationProvider, fitnessFunction, selectionOperator, elitistSelection, crossoverOperator, mutationOperator);

            generationsPlotData  = new List <double>();
            averageScorePlotData = new List <double>();
            bestScorePlotData    = new List <double>();
            UpdatePlotData();
            Plot();

            buttonNextGeneration.Enabled = true;
            buttonRun.Enabled            = true;
            buttonReset.Enabled          = true;
        }
Exemplo n.º 3
0
        private void Benchmark()
        {
            fitnessFunction           = new FitnessFunction(cities);
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));
            elitistSelection          = new ElitistSelection();
            initialPopulationProvider = new InitialPopulationProvider();
            selectionOperator         = new TournamentSelection(Convert.ToInt32(inputTournamentSize.Value));


            var csv = "Crossover Operator,Mutation Operator,Avg. Best Score,Avg. Computation Time";

            var result = RunBenchmark(new CycleCrossover(), new InsertMutation());

            csv += $"\nCycle,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new InversionMutation());
            csv   += $"\nCycle,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new ScrambleMutation());
            csv   += $"\nCycle,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new SwapMutation());
            csv   += $"\nCycle,Swap,{result.Item1},{result.Item2}";


            result = RunBenchmark(new OrderOneCrossover(), new InsertMutation());
            csv   += $"\nOrder1,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new InversionMutation());
            csv   += $"\nOrder1,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new ScrambleMutation());
            csv   += $"\nOrder1,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new OrderOneCrossover(), new SwapMutation());
            csv   += $"\nOrder1,Swap,{result.Item1},{result.Item2}";


            result = RunBenchmark(new PMXCrossover(), new InsertMutation());
            csv   += $"\nPMX,Insert,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new InversionMutation());
            csv   += $"\nPMX,Inversion,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new ScrambleMutation());
            csv   += $"\nPMX,Scramble,{result.Item1},{result.Item2}";

            result = RunBenchmark(new CycleCrossover(), new SwapMutation());
            csv   += $"\nPMX,Swap,{result.Item1},{result.Item2}";

            File.WriteAllText("simulations.csv", csv);
        }
Exemplo n.º 4
0
        public GeneticAlgorithm(Settings settings,
                                IInitialPopulationProvider initialPopulationProvider,
                                IFitnessFunction fitnessFunction,
                                ISelectionOperator selectionOperator,
                                IElitistSelection elitistSelection,
                                ICrossoverOperator crossoverOperator,
                                IMutationOperator mutationOperator)
        {
            this.settings          = settings;
            this.fitnessFunction   = fitnessFunction;
            this.selectionOperator = selectionOperator;
            this.elitistSelection  = elitistSelection;
            this.crossoverOperator = crossoverOperator;
            this.mutationOperator  = mutationOperator;

            currentPopulation = initialPopulationProvider.GetInitialPopulation(settings.PopulationSize, settings.NumberOfCriterias);
            ComputeCurrentGenerationData();
        }
Exemplo n.º 5
0
 public void Setup()
 {
     initialPopulationProvider = new InitialPopulationProvider();
 }