public void ShouldComposeNewProcessInformationForNewGeneration() { Random rng = new Random(); for (Int32 i = 0; i < TestConstants.TestRepeats; i++) { Int32 populationSize = rng.Next(1, 1000); Int32 geneSize = rng.Next(1, 1000); Population <TestIndividual <Int32>, Int32> GetPopulation() { var population = new Population <TestIndividual <Int32>, Int32>(); IList <TestIndividual <Int32> > individuals = new List <TestIndividual <Int32> >(); for (Int32 j = 0; j < populationSize; j++) { var newIndividual = new TestIndividual <Int32>(); Chromosome <Int32> newChromosome = ChromosomeInitializers.GetRandomChromosome <Chromosome <Int32>, Int32>(geneSize , rng_ => ChromosomeInitializers.GetRandomInt32(rng_, 0, 10)); newIndividual.SetChromosome(newChromosome); individuals.Add(newIndividual); } population.SetPopulation(individuals); population.OrderByFitness(new PopulationTests.TestFitnessFunctionInt32()); return(population); } Population <TestIndividual <Int32>, Int32> population1 = GetPopulation(); Population <TestIndividual <Int32>, Int32> population2 = GetPopulation(); var composer = new ProcessInformationComposer <Population <TestIndividual <Int32>, Int32>, TestIndividual <Int32>, Int32>(); ProcessInformation firstProcessInformation = composer.ComposeProcessInformation(null, population1); ProcessInformation secondProcessInformation = composer.ComposeProcessInformation(firstProcessInformation, population2); Assert.Equal(firstProcessInformation.Generation, secondProcessInformation.Generation - 1); Assert.Equal(firstProcessInformation.TotalFitnessDelta, firstProcessInformation.TotalFitness); Assert.Equal(firstProcessInformation.FittestFitnessDelta, firstProcessInformation.FittestFitness); Assert.Equal(firstProcessInformation.FittestNFitnessDelta, firstProcessInformation.FittestNFitness); Assert.Equal(secondProcessInformation.TotalFitnessDelta , secondProcessInformation.TotalFitness - firstProcessInformation.TotalFitness); Assert.Equal(secondProcessInformation.FittestFitnessDelta , secondProcessInformation.FittestFitness - firstProcessInformation.FittestFitness); Assert.Equal(secondProcessInformation.FittestNFitnessDelta , secondProcessInformation.FittestNFitness - firstProcessInformation.FittestNFitness); } }
public void RandomChromosomeInitializerShouldWork() { Random rng = new Random(); Int32 chromosomeLength = rng.Next(1, 1000_000); Int32 geneMin = rng.Next(1, 1000_000); Int32 geneMax = rng.Next(geneMin, 1000_000); // Int32 Func <Random, Int32> randomProvider = ChromosomeInitializers.CreateRandomProvider(geneMin , geneMax, ChromosomeInitializers.GetRandomInt32); Chromosome <Int32> chromosome = ChromosomeInitializers.GetRandomChromosome <Chromosome <Int32>, Int32>(chromosomeLength, randomProvider); Int32[] fullRange = chromosome.GetGeneRange(0, chromosomeLength); Assert.Equal(chromosomeLength, fullRange.Length); foreach (Int32 gene in fullRange) { Assert.True(gene >= geneMin); Assert.True(gene <= geneMax); } // Boolean Func <Random, Boolean> randomProvider2 = ChromosomeInitializers.CreateRandomProvider(false , true, ChromosomeInitializers.GetRandomBoolean); Chromosome <Boolean> chromosome2 = ChromosomeInitializers.GetRandomChromosome <Chromosome <Boolean>, Boolean>(chromosomeLength , randomProvider2); Boolean[] fullRange2 = chromosome2.GetGeneRange(0, chromosomeLength); Assert.Equal(chromosomeLength, fullRange2.Length); // Double Func <Random, Double> randomProvider3 = ChromosomeInitializers.CreateRandomProvider(Convert.ToDouble(geneMin) , Convert.ToDouble(geneMax), ChromosomeInitializers.GetRandomDouble); Chromosome <Double> chromosome3 = ChromosomeInitializers.GetRandomChromosome <Chromosome <Double>, Double>(chromosomeLength , randomProvider3); Double[] fullRange3 = chromosome3.GetGeneRange(0, chromosomeLength); Assert.Equal(chromosomeLength, fullRange3.Length); }