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; }
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; }
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); }
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(); }