private void SetInitialSolution() { var individual = BinaryStringHelper.GenerateRandomIndividual(IndividualLength); ActualSolution = new Reduct(individual, ClusteredDataObjects); CheckedReducts.Add(ActualSolution); }
private void AddRandomIndividualToPopulation() { var randomIndividual = BinaryStringHelper.GenerateRandomIndividual(IndividualLength); TryAddReductToCheckedReductsList(randomIndividual); ActualPopulation.Individuals.Add(CheckedReducts.FirstOrDefault(r => r.Individual == randomIndividual)); }
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)); } }
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()); }
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)); }
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()); }