Ejemplo n.º 1
0
        public void NextGeneration()
        {
            IList <IGenome> newGeneration = new List <IGenome>();
            IList <IGenome> aux;

            this.generation++;
            double avarageFitness = 0;

            for (int i = 0; i < this.Length; i += 2)
            {
                aux = this.Crossover(this.selection.Select(this), this.selection.Select(this));
                mutation.Mutate(aux[0]);
                mutation.Mutate(aux[1]);
                newGeneration.Add(aux[0]);
                newGeneration.Add(aux[1]);
                newGeneration[i].SetFitnessFunction(fitnessFunction);
                avarageFitness += newGeneration[i].Evaluate();
                newGeneration[i + 1].SetFitnessFunction(fitnessFunction);
                avarageFitness += newGeneration[i + 1].Evaluate();
            }

            if (newGeneration.Count > this.Length)
            {
                newGeneration.RemoveAt(this.Length);
            }

            if (DefaultParameter.elitism)
            {
                newGeneration[0] = this.getBest();
            }

            AvarageFitness = avarageFitness / newGeneration.Count;

            this.population = newGeneration;

            //Log.setPopulationLog(this, this.generation, AvarageFitness);
        }