Example #1
0
        public void ShouldFetchChromosome()
        {
            var individual = new TestIndividual <Int32>();
            var chromosome = new Chromosome <Int32>();

            chromosome.InitializeChromosome(3);
            chromosome.SetChromosome(new[]
            {
                1
                , 2
                , 3
            });

            individual.SetChromosome(chromosome);

            IChromosome <Int32> containedChromosome = individual.GetChromosome();

            Assert.Equal(chromosome.GetGenome(), containedChromosome.GetGenome());
        }
Example #2
0
        public TPopulation ModifyPopulation([NotNull] TPopulation originalPopulation)
        {
            #region Validation

            if (originalPopulation == null)
            {
                throw new ArgumentNullException(nameof(originalPopulation));
            }

            #endregion

            Random rng = new Random();

            IEnumerable <TIndividual> individuals = originalPopulation.GetIndividuals().ToList();

            foreach (TIndividual individual in individuals)
            {
                IChromosome <TGene> individualChromosome = individual.GetChromosome();
                Int32 individualGenomeLength             = individualChromosome.GetGenome().Length;

                for (Int32 i = 0; i < individualGenomeLength; i++)
                {
                    Boolean mutate = rng.NextDouble() < _mutationChangePerGene;

                    if (!mutate)
                    {
                        continue;
                    }

                    // Mutate a gene by replacing it with one provided by the injected function.
                    TGene newGene = _newGeneProvider();
                    individualChromosome.SetGeneAt(i, newGene);
                }
            }

            TPopulation newPopulation = new TPopulation();
            newPopulation.SetPopulation(individuals);

            return(newPopulation);
        }