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()); }
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); }