Example #1
0
        public void DefineCompetitivePopulationReturnsCurrentSearchPoints()
        {
            var originalCompetitives = new List <Genome>();

            for (int i = 0; i < 5; i++)
            {
                originalCompetitives.Add(this._genomeBuilder.CreateRandomGenome(age: i % 3));
            }

            var searchPoints = new List <GenomeSearchPoint>();

            for (int i = 0; i < 8; i++)
            {
                searchPoints.Add(
                    GenomeSearchPoint.CreateFromGenome(
                        this._genomeBuilder.CreateRandomGenome(age: 0),
                        this._parameterTree,
                        0,
                        this._genomeBuilder));
            }

            var informationFlowStrategy = new GlobalDifferentialEvolutionInformationFlow(
                this._deConfiguration,
                this._parameterTree,
                this._genomeBuilder);

            var competitiveIndividuals =
                informationFlowStrategy.DefineCompetitivePopulation(originalCompetitives, null, searchPoints);

            Assert.Equal(
                searchPoints.Select(point => point.Genome.ToString()).OrderBy(x => x).ToArray(),
                competitiveIndividuals.Select(genome => genome.ToString()).OrderBy(x => x).ToArray());
        }
Example #2
0
        public void DetermineInitialPointsDoesNotThrowForJadePopulationEqualToThree()
        {
            // Generate a population with 3 competitive genomes.
            var population = new Population(this._completeConfiguration);

            for (int i = 0; i < 3; i++)
            {
                population.AddGenome(this._genomeBuilder.CreateRandomGenome(age: i % 3), isCompetitive: true);
            }

            var incumbent = this._genomeBuilder.CreateRandomGenome(age: 2);

            // Try to call the method. --> Should work.
            var informationFlow = new GlobalDifferentialEvolutionInformationFlow(
                this._deConfiguration,
                this._parameterTree,
                this._genomeBuilder);

            informationFlow.DetermineInitialPoints(population, incumbent);
        }
Example #3
0
        public void DetermineInitialPointsThrowsForJadePopulationSmallerThree()
        {
            // Generate a population with only 2 competitive genomes.
            var population = new Population(this._completeConfiguration);

            for (int i = 0; i < 2; i++)
            {
                population.AddGenome(this._genomeBuilder.CreateRandomGenome(age: i % 3), isCompetitive: true);
            }

            var incumbent = this._genomeBuilder.CreateRandomGenome(age: 2);

            // Try to call the method.
            var informationFlow = new GlobalDifferentialEvolutionInformationFlow(
                this._deConfiguration,
                this._parameterTree,
                this._genomeBuilder);

            Assert.Throws <ArgumentException>(() => informationFlow.DetermineInitialPoints(population, incumbent));
        }
Example #4
0
        public void DetermineInitialPointsTransformsAllCompetitives()
        {
            var population = new Population(this._completeConfiguration);

            for (int i = 0; i < 5; i++)
            {
                population.AddGenome(this._genomeBuilder.CreateRandomGenome(age: i % 3), isCompetitive: true);
            }

            for (int i = 0; i < 2; i++)
            {
                population.AddGenome(this._genomeBuilder.CreateRandomGenome(age: i % 3), isCompetitive: false);
            }

            var informationFlowStrategy = new GlobalDifferentialEvolutionInformationFlow(
                this._deConfiguration,
                this._parameterTree,
                this._genomeBuilder);
            var points = informationFlowStrategy.DetermineInitialPoints(population, null);

            Assert.Equal(
                population.GetCompetitiveIndividuals().Select(genome => genome.ToString()).OrderBy(x => x).ToArray(),
                points.Select(point => point.Genome.ToString()).OrderBy(x => x).ToArray());
        }