private void ConductGeneticAlgorithm() { if (isConductingGA) { return; } isConductingGA = true; int[,] xVal = new int[4, DataStorage.initialPopCount]; if (generationCtr == 0) { for (int i = 0; i < DataStorage.initialPopCount; i++) { xVal[0, i] = xVal[1, i] = xVal[2, i] = xVal[3, i] = rnd.Next(DataStorage.lowerBound, DataStorage.UpperBound); } } else { xVal = mutatedChromosomes; } // Performing selection int[,] selectedXVal = Selection.DoSelection(xVal, ref mainSelectionTable, ref additionalSelectionTable); // Performing crossover int[,] crossOveredValue = Crossover.DoCrossover(selectedXVal, ref crossOverTable); // Performing mutation int[] maxima = new int[4]; mutatedChromosomes = Mutation.DoMutation(crossOveredValue, ref mutationTable, ref maxima); for (int gen = 0; gen < 4; gen++) { maximaSaved[generationCtr, gen] = maxima[gen]; } GenerationTB.Text = (generationCtr + 1).ToString(); MaximaTB.Text = maxima[genIndex].ToString(); for (int gen = 0; gen < 4; gen++) { GenVsMaximaChart.Series[DataStorage.selectionSchemes[gen]].Points.AddXY((generationCtr + 1), DataStorage.UpperBound - maximaSaved[generationCtr, gen]); } generationCtr++; isConductingGA = false; if (generationCtr == DataStorage.generationCount) { Form analysis = new Analysis(); analysis.Show(); } }
private void ConductGeneticAlgorithm() { string[,] initialPath = new string[4, DataStorage.initialPopCount]; if (generationCtr == 0) { for (int i = 0; i < DataStorage.initialPopCount; i++) { initialPath[0, i] = initialPath[1, i] = initialPath[2, i] = initialPath[3, i] = Utility.GetRandomPath(DataStorage.cityCount); } } else { initialPath = mutatedPath; } // Performing selection string[,] selectedpath = Selection.DoSelection(initialPath, ref mainSelectionTable, ref additionalSelectionTable); // Performing crossover string[,] crossOveredValue = Crossover.DoCrossover(selectedpath, ref crossOverTable); // Performing mutation int[] minima = new int[4]; string[] minimaPath = new string[4]; mutatedPath = Mutation.DoMutation(crossOveredValue, ref mutationTable, ref minima, ref minimaPath); for (int gen = 0; gen < 4; gen++) { minimaSaved[generationCtr, gen] = minima[gen]; minimaPathSaved[generationCtr, gen] = minimaPath[gen]; } GenerationTB.Text = (generationCtr + 1).ToString(); MinimaTB.Text = minima[genIndex].ToString(); MinimaPathTB.Text = minimaPath[genIndex].ToString(); for (int gen = 0; gen < 4; gen++) { DistanceChart.Series[DataStorage.selectionSchemes[gen]].Points.AddXY((generationCtr + 1), minimaSaved[generationCtr, gen]); } generationCtr++; if (generationCtr == DataStorage.generationCount) { Form analysis = new Analysis(); analysis.Show(); } }