public void NextGeneration() { SpeciesCollection.ClearSpecies(); foreach (var genome in CurrentGeneration) { SpeciesCollection.Speciate(genome); } SpeciesCollection.ClearEmptySpecies(); int population = Population; var nextGeneration = SpeciesCollection.Selection(population); LastGenerationWithSpecies = nextGeneration; // fill up when there is no species or var remaining = population - nextGeneration.Count; for (int i = 0; i < remaining; i++) { nextGeneration.Add(Genome.CreateDefault(this), null); } //Populate(population); LastFillUp = remaining; LastGeneration.Clear(); LastGeneration.AddRange(CurrentGeneration); CurrentGeneration.Clear(); CurrentGeneration.AddRange(nextGeneration.Select(x => x.Key)); Generation++; }
public GeneticSearchResult BuildResult() { if (LastGeneration == null) { throw new InternalSearchException("Code 1001 (called build before adding any generations)"); } return(new GeneticSearchResult(LastGeneration.ChooseBest(), LastGeneration.Clone(), history, searchTime, Generation, isComplated, Environment)); }
public void Reset(int population, int inputs, int outputs) { Generation = 0; InnovationId = 0; GenomeId = 0; NodeId = 0; InitialNodes.Clear(); CurrentGeneration.Clear(); LastGeneration.Clear(); SpeciesCollection.SpeciesItems.Clear(); Connections.Clear(); Initialize(population, inputs, outputs); }