Exemplo n.º 1
0
 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));
     }
 }
Exemplo n.º 2
0
        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);
        }