public void NextGeneration()
        {
            FitnessStats.SaveCurrentToHistory();
            Generation++;

            var newGenomes = new List <Genome>();

            if (_genetics.EliteCount > 0)
            {
                var elites = Genomes.OrderByDescending(x => x.Fitness).Take(_genetics.EliteCount);
                newGenomes.AddRange(elites);
            }

            while (newGenomes.Count < Genomes.Count())
            {
                var mother = getGenomeByRoulette();
                var father = getGenomeByRoulette();

                var children = _genetics.Crossover(mother, father);
                foreach (var child in children)
                {
                    _genetics.Mutate(child);
                    newGenomes.Add(child);
                }
            }
            newGenomes.ForEach(x => x.ResetFitness());
            Genomes = newGenomes.Take(Genomes.Count()).ToList();
        }
Esempio n. 2
0
        public void Evolve()
        {
            int prevPoplLen;

            prevPoplLen = Genomes.Count();

            Genomes = GenerationGenerator.Generate(Genomes);
            if (!Genomes.Any())
            {
                Populate(prevPoplLen);
            }

            Generation++;
        }