private int[][] SearchHelper(int mostFit, int[][] population) { if (mostFit <= mostFitTargetScore) { return(population); } else { List <IntArrayComparableContainer <int[]> > fitness = new List <IntArrayComparableContainer <int[]> >(); foreach (int[] chromosome in population) { IntArrayComparableContainer <int[]> container = new IntArrayComparableContainer <int[]>(); container.Object = chromosome; container.Value = this.Fitness(chromosome); fitness.Add(container); } fitness.Sort(); if (halfMostFit == null) { halfMostFit = new int[fitness.Count / 2][]; } for (int i = 0, count = fitness.Count / 2; i < count; i++) { halfMostFit[i] = new int[fitness[i].Object.Length]; halfMostFit[i] = fitness[i].Object; } int[][] newPopulation = this.Crossover(halfMostFit); Array.Copy(newPopulation, 0, population, 0, population.Length / 2); int[] mostFitChromosome = GetFittestPopulation(population); int mostFitChromosomeScore = Fitness(mostFitChromosome); return(SearchHelper(mostFitChromosomeScore, population)); } }
public override int[] GetFittestPopulation(int[][] population) { List <IntArrayComparableContainer <int[]> > fitness = new List <IntArrayComparableContainer <int[]> >(); foreach (int[] chromosome in population) { IntArrayComparableContainer <int[]> container = new IntArrayComparableContainer <int[]>(); container.Object = chromosome; container.Value = this.Fitness(chromosome); fitness.Add(container); } fitness.Sort(); return(fitness.First().Object); }