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); }