/// <summary>
        ///     Determines the MCC maze navigation experiment to run based on the given search and selection algorithm.
        /// </summary>
        /// <param name="searchAlgorithmName">The search algorithm to run.</param>
        /// <param name="selectionAlgorithmName">The selection algorithm to run.</param>
        /// <returns>The applicable MCC maze navigation experiment.</returns>
        private static BaseMCCMazeNavigationExperiment DetermineMCCMazeNavigationExperiment(
            string searchAlgorithmName, string selectionAlgorithmName)
        {
            // Extract the corresponding search and selection algorithm domain types
            var searchType    = AlgorithmTypeUtil.ConvertStringToSearchType(searchAlgorithmName);
            var selectionType = AlgorithmTypeUtil.ConvertStringToSelectionType(selectionAlgorithmName);

            // Queueing MCC experiment with separate (currently per-species) queues
            if (SelectionType.MultipleQueueing.Equals(selectionType))
            {
                return(new MCCSpeciationExperiment());
            }

            // Otherwise, go with the single maze, single queue MCC experiment
            return(new MCCControlExperiment());
        }
Exemple #2
0
        /// <summary>
        ///     Determines which MCC initializer to instantiate and return based on the initialization algorithm search
        ///     type.
        /// </summary>
        /// <param name="xmlConfig">XML initialization configuration.</param>
        /// <returns>The instantiated initializer.</returns>
        public static MCCMazeNavigationInitializer DetermineMCCInitializer(XmlElement xmlConfig)
        {
            // Make sure that the XML configuration exists
            if (xmlConfig == null)
            {
                throw new ArgumentException("Missing or invalid MCC initialization configuration.");
            }

            // Extract the corresponding search and selection algorithm domain types
            var searchType =
                AlgorithmTypeUtil.ConvertStringToSearchType(XmlUtils.TryGetValueAsString(xmlConfig, "SearchAlgorithm"));

            // There's currently just two MCC initializers: fitness and novelty search
            switch (searchType)
            {
            case SearchType.Fitness:
                return(new FitnessMCCMazeNavigationInitializer());

            default:
                return(new NoveltySearchMCCMazeNavigationInitializer());
            }
        }