Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }