public override void Initialize(Population population) { InitilizeNodeGenes(population); if (nodeGenes.Count != 5) { throw new TypeInitializationException("not 5 nodes initially", null); } InitializeConnectionGenes(population); if (connectionGenes.Count != 6) { throw new TypeInitializationException("not 6 connections initially", null); } if (EAParameters.RandomGeneStart) { if (Neat.random.NextDouble() <= EAParameters.RandomGeneStartChance) { Mutator.Mutate(this, population); } } }
private List <NEATIndividual> ASexualPart(int ASexCount, List <NEATIndividual> ASexPopulace, List <NEATIndividual> missFits, Population population) { var _populace = new List <NEATIndividual>(); while (_populace.Count < ASexCount && !ASexPopulace.IsEmpty()) { var origIndie = Neat.random.Individual(ASexPopulace); origIndie.genome = Mutator.Mutate(origIndie.genome, population); var mutatedIndie = new NEATIndividual(origIndie); if (BelongsInSpecies(mutatedIndie)) { _populace.Add(mutatedIndie); } else { missFits.Add(mutatedIndie); } ASexPopulace.Remove(origIndie); } return(_populace); }
private List <NEATIndividual> SexualPart(int AllowedPopulaceSize, List <NEATIndividual> missFits, Population population) { var _populace = new List <NEATIndividual>(); while (_populace.Count < AllowedPopulaceSize) { var dad = Neat.random.Individual(populace); var mum = Neat.random.Individual(populace); var child = new NEATIndividual(Mutator.Crossover(dad, mum), population.IDs); if (Neat.random.NextBoolean(EAParameters.SexualReproductionStillMutateChance)) { child.genome = Mutator.Mutate(child.genome, population); } if (BelongsInSpecies(child)) { _populace.Add(child); } else { missFits.Add(child); } } return(_populace); }