/// <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()); }
/// <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()); } }