Exemple #1
0
        public override void UseStatusDumpReadsInformationFromFile()
        {
            var basePopulation = this.CreatePopulation();
            var incumbent      = this.CreateIncumbentGenomeWrapper();

            this.Strategy.Initialize(basePopulation, incumbent, this.SingleTestInstance, 0, false);
            this.Strategy.PerformIteration(0, this.SingleTestInstance, false);
            this.Strategy.DumpStatus();
            var originalPoints = StatusBase.ReadFromFile <DifferentialEvolutionStrategyStatus <TestInstance> >(this._statusFilePath)
                                 .MostRecentSorting;

            // Create new strategy to read the status dump.
            var newStrategy = new DifferentialEvolutionStrategy <TestInstance, IntegerResult>(
                this.Configuration,
                this.ParameterTree,
                this.GenomeBuilder,
                this.GenerationEvaluationActor,
                this.ResultStorageActor);

            newStrategy.UseStatusDump(null);
            newStrategy.DumpStatus();
            var status =
                StatusBase.ReadFromFile <DifferentialEvolutionStrategyStatus <TestInstance> >(this._statusFilePath);

            // Strategy should have read the last sorting from file.
            // Use strings in comparisons to also compare age.
            Assert.Equal(
                originalPoints.Select(point => point.Genome.ToString()).ToList(),
                status.MostRecentSorting.Select(point => point.Genome.ToString()).ToList());

            // Strategy should have read the original incumbent from file.
            Assert.Equal(
                incumbent.IncumbentGenome.ToString(),
                status.OriginalIncumbent.ToString());

            // Strategy should have read the current evaluation instances from file.
            Assert.Equal(
                this.SingleTestInstance.Select(instance => instance.ToString()).ToArray(),
                status.CurrentEvaluationInstances.Select(instance => instance.ToString()).ToArray());

            // And its DE runner should have also used its status dump.
            var deStatus =
                StatusBase.ReadFromFile <DifferentialEvolutionStatus <GenomeSearchPoint> >(this._deStatusFilePath);

            Assert.True(
                deStatus.SortedPopulation.Count > 0,
                "New DE runner should have read initialized population from old file.");
        }
Exemple #2
0
        public void InformationFlowDependsOnFocusOnIncumbentOption()
        {
            // Create two strategies: One with focus on incumbent, one without.
            var noIncumbentFocusConfiguration = base.CreateTunerConfigurationBuilder()
                                                .AddDetailedConfigurationBuilder(
                DifferentialEvolutionStrategyArgumentParser.Identifier,
                new DifferentialEvolutionStrategyConfiguration.DifferentialEvolutionStrategyConfigurationBuilder()
                .SetFocusOnIncumbent(false)
                .SetReplacementRate(0)
                .SetDifferentialEvolutionConfigurationBuilder(
                    new DifferentialEvolutionConfiguration.DifferentialEvolutionConfigurationBuilder())).Build();
            var globalStrategy = new DifferentialEvolutionStrategy <TestInstance, IntegerResult>(
                noIncumbentFocusConfiguration,
                this.ParameterTree,
                this.GenomeBuilder,
                this.GenerationEvaluationActor,
                this.ResultStorageActor);
            var incumbentFocusConfiguration = base.CreateTunerConfigurationBuilder()
                                              .AddDetailedConfigurationBuilder(
                DifferentialEvolutionStrategyArgumentParser.Identifier,
                new DifferentialEvolutionStrategyConfiguration.DifferentialEvolutionStrategyConfigurationBuilder()
                .SetFocusOnIncumbent(true)
                .SetReplacementRate(0)
                .SetDifferentialEvolutionConfigurationBuilder(
                    new DifferentialEvolutionConfiguration.DifferentialEvolutionConfigurationBuilder())).Build();
            var localStrategy = new DifferentialEvolutionStrategy <TestInstance, IntegerResult>(
                incumbentFocusConfiguration,
                this.ParameterTree,
                this.GenomeBuilder,
                this.GenerationEvaluationActor,
                this.ResultStorageActor);

            // Create a population.
            var basePopulation = this.CreatePopulation();
            var incumbent      = this.CreateIncumbentGenomeWrapper();

            basePopulation.AddGenome(incumbent.IncumbentGenome, isCompetitive: true);

            // Let both DE strategies run for an iteration.
            globalStrategy.Initialize(basePopulation, incumbent, this.SingleTestInstance, 0, false);
            localStrategy.Initialize(basePopulation, incumbent, this.SingleTestInstance, 0, false);
            globalStrategy.PerformIteration(0, this.SingleTestInstance, false);
            localStrategy.PerformIteration(0, this.SingleTestInstance, false);

            // Count the number of competitive genomes which did not change for the local strategy.
            var newCompetitives = localStrategy.FinishPhase(basePopulation).GetCompetitiveIndividuals();
            int notChanged      = 0;

            foreach (var genome in basePopulation.GetCompetitiveIndividuals())
            {
                if (newCompetitives.Any(individual => individual.ToString().Equals(genome.ToString())))
                {
                    notChanged++;
                }
            }

            Assert.True(
                newCompetitives.Count - 1 == notChanged,
                "In the local strategy with replacement rate of 0, only one genome should have changed.");

            // And then do the same for the global strategy.
            var otherCompetitives = globalStrategy.FinishPhase(basePopulation).GetCompetitiveIndividuals();

            notChanged = 0;
            foreach (var genome in basePopulation.GetCompetitiveIndividuals())
            {
                if (otherCompetitives.Any(individual => individual.ToString().Equals(genome.ToString())))
                {
                    notChanged++;
                }
            }

            Assert.True(
                otherCompetitives.Count - 1 > notChanged,
                "In the global strategy with replacement rate of 0, more than one genome should have changed.");
        }