public void CreateCovarianceMatrixAdaptationStrategyReturnsCorrectStrategyType()
        {
            var localConfiguration = CovarianceMatrixAdaptationInformationFlowSwitchTest.CreateConfiguration(focusOnIncumbent: true);
            var strategy           =
                CovarianceMatrixAdaptationInformationFlowSwitch.CreateCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>(
                    localConfiguration,
                    this.GetDefaultParameterTree(),
                    this.GenomeBuilder,
                    this.GenomeSorter,
                    this.ResultStorageActor);

            Assert.Equal(
                typeof(LocalCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>),
                strategy.GetType());

            var globalConfiguration = CovarianceMatrixAdaptationInformationFlowSwitchTest.CreateConfiguration(focusOnIncumbent: false);

            strategy =
                CovarianceMatrixAdaptationInformationFlowSwitch.CreateCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>(
                    globalConfiguration,
                    this.GetDefaultParameterTree(),
                    this.GenomeBuilder,
                    this.GenomeSorter,
                    this.ResultStorageActor);
            Assert.Equal(
                typeof(GlobalCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>),
                strategy.GetType());
        }
コード例 #2
0
        /// <summary>
        /// Chooses the next population update strategy after this one finished.
        /// </summary>
        /// <param name="populationUpdateStrategies">Possible strategies.</param>
        /// <returns>Index of the chosen strategy.</returns>
        public int NextStrategy(List <IPopulationUpdateStrategy <TInstance, TResult> > populationUpdateStrategies)
        {
            Type nextStrategyType;

            switch (this._configuration.ContinuousOptimizationMethod)
            {
            case ContinuousOptimizationMethod.None:
                nextStrategyType = typeof(GgaStrategy <TInstance, TResult>);
                break;

            case ContinuousOptimizationMethod.Jade:
                nextStrategyType = typeof(DifferentialEvolutionStrategy <TInstance, TResult>);
                break;

            case ContinuousOptimizationMethod.CmaEs:
                nextStrategyType =
                    CovarianceMatrixAdaptationInformationFlowSwitch.DetermineCovarianceMatrixAdaptationStrategyType <TInstance, TResult>(
                        this._configuration);
                break;

            default:
                throw new NotImplementedException(
                          $"{this._configuration.ContinuousOptimizationMethod} is not mapped to a type in GGA strategy.");
            }

            return(populationUpdateStrategies.FindIndex(strategy => strategy.GetType() == nextStrategyType));
        }
        public void DetermineCovarianceMatrixAdaptationStrategyTypeReturnsCorrectType()
        {
            var localConfiguration = CovarianceMatrixAdaptationInformationFlowSwitchTest.CreateConfiguration(focusOnIncumbent: true);

            Assert.Equal(
                typeof(LocalCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>),
                CovarianceMatrixAdaptationInformationFlowSwitch.DetermineCovarianceMatrixAdaptationStrategyType <TestInstance, TestResult>(
                    localConfiguration));

            var globalConfiguration = CovarianceMatrixAdaptationInformationFlowSwitchTest.CreateConfiguration(focusOnIncumbent: false);

            Assert.Equal(
                typeof(GlobalCovarianceMatrixAdaptationStrategy <TestInstance, TestResult>),
                CovarianceMatrixAdaptationInformationFlowSwitch.DetermineCovarianceMatrixAdaptationStrategyType <TestInstance, TestResult>(
                    globalConfiguration));
        }
コード例 #4
0
        /// <summary>
        /// Creates the different <see cref="IPopulationUpdateStrategy{TInstance,TResult}"/>s that may be used to
        /// update the population.
        /// </summary>
        /// <param name="targetAlgorithmFactory">
        /// Produces configured instances of the target algorithm to tune.
        /// </param>
        /// <param name="runEvaluator">
        /// Object for evaluating target algorithm runs.
        /// </param>
        /// <returns>The created <see cref="IPopulationUpdateStrategy{TInstance,TResult}"/>s.</returns>
        private IEnumerable <IPopulationUpdateStrategy <TInstance, TResult> > CreatePopulationUpdateStrategies(
            ITargetAlgorithmFactory <TTargetAlgorithm, TInstance, TResult> targetAlgorithmFactory,
            IRunEvaluator <TResult> runEvaluator)
        {
            var tournamentSelector = this._targetAlgorithmRunActors.ActorOf(
                Props.Create(
                    () => new TournamentSelector <TTargetAlgorithm, TInstance, TResult>(
                        targetAlgorithmFactory,
                        runEvaluator,
                        this._configuration,
                        this._targetRunResultStorage,
                        this._parameterTree)),
                AkkaNames.TournamentSelector);

            yield return(new GgaStrategy <TInstance, TResult>(
                             this._configuration,
                             this._parameterTree,
                             this._genomeBuilder,
                             tournamentSelector,
                             this.GeneticEngineering));

            if (this._configuration.ContinuousOptimizationMethod == ContinuousOptimizationMethod.Jade)
            {
                yield return(new DifferentialEvolutionStrategy <TInstance, TResult>(
                                 this._configuration,
                                 this._parameterTree,
                                 this._genomeBuilder,
                                 this._genomeSorter,
                                 this._targetRunResultStorage));
            }

            if (this._configuration.ContinuousOptimizationMethod == ContinuousOptimizationMethod.CmaEs)
            {
                yield return(CovarianceMatrixAdaptationInformationFlowSwitch.CreateCovarianceMatrixAdaptationStrategy <TInstance, TResult>(
                                 this._configuration,
                                 this._parameterTree,
                                 this._genomeBuilder,
                                 this._genomeSorter,
                                 this._targetRunResultStorage));
            }
        }