private void performAlgorithm(int maxOrMin) { GSA.GAMax.Algorithm.UniformRate = Double.Parse(MaxCrossOverProbTextBox.Text); GSA.GAMax.Algorithm.MutationRate = Double.Parse(MaxMutationProbTextBox.Text); GSA.GAMax.Algorithm.Elitism = MaxElitismCheckBox.IsChecked.Value; GSA.GAMax.Algorithm.DieFactor = DieFactorCheckBox.IsChecked.Value; GSA.GAMax.Algorithm.Rnd = new Random(); GSA.GAMax.Individual.Rnd = new Random(); GSA.GAMax.Algorithm.bestSolution = null; LogTextBox log = new GSA.LogTextBox(LogTextBox); log.Write("Constants setted", Brushes.BlueViolet); GSA.GAMax.Individual.setDefaultGeneLength(int.Parse(BinaryLengthTextBox.Text)); GSA.GAMax.Population maxPop = new GSA.GAMax.Population(int.Parse(PopulationNumberTextBox.Text), true); GSA.GAMax.FitnessCalc._op = (GSA.GAMax.Operation)maxOrMin; if (GSA.GAMax.FitnessCalc.setFunctionToOperate(FormulaTextBox.Text)) { log.Write(String.Format("Function setted: {0}", GSA.GAMax.FitnessCalc._exp.ParsedExpression.ToString()), Brushes.Azure); //setear población log.Write("Initial population, size: " + maxPop.size().ToString(), Brushes.Turquoise); for (int i = 0; i < maxPop.size(); i++) { log.Write(maxPop.getIndividual(i).ToString(), Brushes.Wheat); } } else { log.Write(String.Format("Your function has errors: {0}", GSA.GAMax.FitnessCalc._exp.Error), Brushes.PaleVioletRed); log.Write("The function must be correct and contains an 'x' between []. Example 'Pow([x], 3) + 5*[x] - 2 / ([x]+2)", Brushes.PaleVioletRed); } int generationCount = 0; int MaxGeneration = int.Parse(MaxIterationsTextBox.Text); while (generationCount < MaxGeneration) { generationCount++; //log.Write("Generation: " + generationCount + " Fittest: " + myPop.getFittest().getFitness(), Brushes.Yellow); GSA.GAMax.FitnessCalc.CurrentPopulation = maxPop; maxPop = GSA.GAMax.Algorithm.evolvePopulation(maxPop); } log.Write("Best Solution found!", Brushes.GreenYellow); log.Write("Generation: " + generationCount); log.Write("Genes:"); GSA.GAMax.Individual bestSolutionFound = GSA.GAMax.FitnessCalc.getFittest(); if (!GSA.GAMax.Algorithm.betterFitness(GSA.GAMax.Algorithm.bestSolution, bestSolutionFound)) { bestSolutionFound = GSA.GAMax.Algorithm.bestSolution; } log.Write(bestSolutionFound.ToString()); }