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