Beispiel #1
0
        private void SetInitialSolution()
        {
            var individual = BinaryStringHelper.GenerateRandomIndividual(IndividualLength);

            ActualSolution = new Reduct(individual, ClusteredDataObjects);
            CheckedReducts.Add(ActualSolution);
        }
Beispiel #2
0
        private void AddRandomIndividualToPopulation()
        {
            var randomIndividual = BinaryStringHelper.GenerateRandomIndividual(IndividualLength);

            TryAddReductToCheckedReductsList(randomIndividual);
            ActualPopulation.Individuals.Add(CheckedReducts.FirstOrDefault(r => r.Individual == randomIndividual));
        }
Beispiel #3
0
        private void SetInitialPopulation()
        {
            ActualPopulation = new Population();

            for (var i = 0; i < _inputValues.PopulationSize; i++)
            {
                var randomIndividual = BinaryStringHelper.GenerateRandomIndividual(IndividualLength);
                TryAddReductToCheckedReductsList(randomIndividual);
                ActualPopulation.Individuals.Add(CheckedReducts.FirstOrDefault(r => r.Individual == randomIndividual));
            }
        }
Beispiel #4
0
        private IEnumerable <Reduct> GenerateSortedNeighborhoodForActualSolution()
        {
            var neighborsList = new List <Reduct>();

            for (var i = 0; i < IndividualLength; i++)
            {
                var neighborIndividual = GenerateNeighborIndividualString(i);
                TryAddReductToCheckedReductsList(neighborIndividual);
                neighborsList.Add(CheckedReducts.FirstOrDefault(r => r.Individual == neighborIndividual));
            }

            return(neighborsList.OrderBy(n => n.FitnessFunction).ThenBy(n => n.Subset.Count).ToList());
        }
Beispiel #5
0
        private Tuple <Reduct, Reduct> CrossoverIndividuals(Tuple <string, string> individualsTuple)
        {
            var placeOfCross = RandomIntNumber(IndividualLength);

            var newIndividual1 = individualsTuple.Item1.Substring(0, placeOfCross) + individualsTuple.Item2.Substring(placeOfCross);
            var newIndividual2 = individualsTuple.Item2.Substring(0, placeOfCross) + individualsTuple.Item1.Substring(placeOfCross);

            TryAddReductToCheckedReductsList(newIndividual1);
            TryAddReductToCheckedReductsList(newIndividual2);

            var newReduct1 = CheckedReducts.FirstOrDefault(r => r.Individual == newIndividual1);
            var newReduct2 = CheckedReducts.FirstOrDefault(r => r.Individual == newIndividual2);

            return(new Tuple <Reduct, Reduct>(newReduct1, newReduct2));
        }
Beispiel #6
0
        private void GenerateNewSolutionFromNeighbors(Reduct eliteReduct, int neighborhoodSize, int neighborhoodSteps)
        {
            var neighborhood = new List <Reduct>();

            for (var i = 0; i < neighborhoodSize; i++)
            {
                var neighborIndividual = string.Empty;
                for (var j = 0; j < neighborhoodSteps; j++)
                {
                    neighborIndividual = BinaryStringHelper.GenerateNeighborSolution(eliteReduct.Individual);
                }

                TryAddReductToCheckedReductsList(neighborIndividual);
                neighborhood.Add(CheckedReducts.FirstOrDefault(r => r.Individual == neighborIndividual));
            }
            ActualPopulation.Individuals.Add(neighborhood.OrderByDescending(r => r.Approximation).ThenBy(i => i.Subset.Count).FirstOrDefault());
        }