示例#1
0
 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);
         }
     }
 }
示例#2
0
        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);
        }
示例#3
0
        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);
        }