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();
            }
        }
Beispiel #2
0
        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();
            }
        }