Пример #1
0
        public GA(AlgorithmParameters algorithmParameters, EvaluatedFunction evaluatedFunction)
        {
            this.algorithmParameters = algorithmParameters;
            this.evaluatedFunction   = evaluatedFunction;
            this.Chromosomes         = new BitArray[algorithmParameters.Generations, 2, algorithmParameters.Population];
            this.ChromosomeValues    = new double[algorithmParameters.Generations, 3, algorithmParameters.Population];

            this.BestValues   = new double[algorithmParameters.Generations];
            this.MeanValues   = new double[algorithmParameters.Generations];
            this.MedianValues = new double[algorithmParameters.Generations];
            this.random       = new Random();
            // generate first population

            for (int individualIndex = 0; individualIndex < algorithmParameters.Population; individualIndex++)
            {
                int x = generateRandomValue();
                int y = generateRandomValue();
                System.Diagnostics.Debug.WriteLine("X: " + x.ToString());
                System.Diagnostics.Debug.WriteLine("Y: " + y.ToString());
                BitArray x_genome = int2Binary(x, this.algorithmParameters.Precision);
                BitArray y_genome = int2Binary(y, this.algorithmParameters.Precision);
                this.Chromosomes[0, 0, individualIndex] = x_genome;
                this.Chromosomes[0, 1, individualIndex] = y_genome;
            }
        }
Пример #2
0
        private void AddParameters(object sender, RoutedEventArgs e)
        {
            DlgAddParameters    dlg = new DlgAddParameters();
            AlgorithmParameters algorithmParameters;

            if (dlg.ShowDialog() == true)
            {
                double crossoverProbability = (double)dlg.crossoverProbability.Value;
                double mutationProbability  = (double)dlg.mutationProbability.Value;
                int    population           = (int)dlg.individualsNumber.Value;
                int    generationsNumber    = (int)dlg.generationsNumber.Value;
                int    precision            = (int)dlg.precision.Value;
                bool   isMaximumSearching   = (bool)dlg.maximumSearch.IsChecked;
                algorithmParameters = new AlgorithmParameters(crossoverProbability, mutationProbability, population, generationsNumber, precision, isMaximumSearching);
                algorithmParametersList.Add(algorithmParameters);
                ICollectionView AlgParams = CollectionViewSource.GetDefaultView(AlgorithmGrid.ItemsSource);
                if (AlgParams != null && AlgParams.CanGroup == true)
                {
                    AlgParams.GroupDescriptions.Clear();
                }
                AlgorithmGrid.Items.Refresh();
            }
        }
Пример #3
0
        private void Edit_Algorithm(object sender, RoutedEventArgs e)
        {
            DlgAddParameters    dlg = new DlgAddParameters();
            AlgorithmParameters algorithmParameters = AlgorithmGrid.SelectedItem as AlgorithmParameters;
            int indexOfAlgorithm = algorithmParametersList.IndexOf(algorithmParameters);

            dlg.crossoverProbability.Value = algorithmParameters.CrossoverProbability;
            dlg.mutationProbability.Value  = algorithmParameters.MutationProbability;
            dlg.individualsNumber.Value    = algorithmParameters.Population;
            dlg.generationsNumber.Value    = algorithmParameters.Generations;
            dlg.precision.Value            = algorithmParameters.Precision;
            dlg.maximumSearch.IsChecked    = algorithmParameters.isMaxSearching;
            if (dlg.ShowDialog() == true)
            {
                algorithmParameters.CrossoverProbability  = (double)dlg.crossoverProbability.Value;
                algorithmParameters.MutationProbability   = (double)dlg.mutationProbability.Value;
                algorithmParameters.Population            = (int)dlg.individualsNumber.Value;
                algorithmParameters.Generations           = (int)dlg.generationsNumber.Value;
                algorithmParameters.Precision             = (int)dlg.precision.Value;
                algorithmParameters.isMaxSearching        = (bool)dlg.maximumSearch.IsChecked;
                algorithmParametersList[indexOfAlgorithm] = algorithmParameters;
                AlgorithmGrid.Items.Refresh();
            }
        }
Пример #4
0
        private void FilterParameters(object sender, RoutedEventArgs e)
        {
            DlgFilterParameters dlg = new DlgFilterParameters();

            if (dlg.ShowDialog() == true)
            {
                ListCollectionView collectionView = new ListCollectionView(algorithmParametersList);
                collectionView.Filter = (o) =>
                {
                    AlgorithmParameters algorithmParameters = o as AlgorithmParameters;
                    if (dlg.greaterCrossover.IsChecked != null)
                    {
                        if ((bool)dlg.greaterCrossover.IsChecked)
                        {
                            if (algorithmParameters.CrossoverProbability <= dlg.crossoverProbability.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.lesserCrossover.IsChecked != null)
                    {
                        if ((bool)dlg.lesserCrossover.IsChecked)
                        {
                            if (algorithmParameters.CrossoverProbability >= dlg.crossoverProbability.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.greaterMutation.IsChecked != null)
                    {
                        if ((bool)dlg.greaterMutation.IsChecked)
                        {
                            if (algorithmParameters.MutationProbability <= dlg.mutationProbability.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.lesserMutation.IsChecked != null)
                    {
                        if ((bool)dlg.lesserMutation.IsChecked)
                        {
                            if (algorithmParameters.MutationProbability >= dlg.mutationProbability.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.greaterPrecision.IsChecked != null)
                    {
                        if ((bool)dlg.greaterPrecision.IsChecked)
                        {
                            if (algorithmParameters.Precision <= dlg.precision.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.lesserPrecision.IsChecked != null)
                    {
                        if ((bool)dlg.lesserPrecision.IsChecked)
                        {
                            if (algorithmParameters.Precision >= dlg.precision.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.greaterPopulation.IsChecked != null)
                    {
                        if ((bool)dlg.greaterPopulation.IsChecked)
                        {
                            if (algorithmParameters.Population <= dlg.individualsNumber.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.lesserPopulation.IsChecked != null)
                    {
                        if ((bool)dlg.lesserPopulation.IsChecked)
                        {
                            if (algorithmParameters.Population >= dlg.individualsNumber.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.greaterGeneration.IsChecked != null)
                    {
                        if ((bool)dlg.greaterGeneration.IsChecked)
                        {
                            if (algorithmParameters.Generations <= dlg.generationsNumber.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.lesserGeneration.IsChecked != null)
                    {
                        if ((bool)dlg.lesserGeneration.IsChecked)
                        {
                            if (algorithmParameters.Generations >= dlg.generationsNumber.Value)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.minimumSearch.IsChecked != null)
                    {
                        if ((bool)dlg.minimumSearch.IsChecked)
                        {
                            if (algorithmParameters.isMaxSearching)
                            {
                                return(false);
                            }
                        }
                    }
                    if (dlg.maximumSearch.IsChecked != null)
                    {
                        if ((bool)dlg.maximumSearch.IsChecked)
                        {
                            if (!algorithmParameters.isMaxSearching)
                            {
                                return(false);
                            }
                        }
                    }
                    return(true);
                };
                AlgorithmGrid.ItemsSource = collectionView;
            }
        }