/// <summary> /// Parses a Population element. /// </summary> /// <param name="element">The Population element.</param> /// <returns>The parsed population metadata.</returns> private static IPopulationMetadata ParsePopulation(XElement element) { var populationMetadata = new PopulationMetadata(); ParsePopulationAttributes(ref populationMetadata, element); ParsePopulationChildren(ref populationMetadata, element); return(populationMetadata); }
/// <summary> /// Parses the population children. /// </summary> /// <param name="populationMetadata">The population metadata.</param> /// <param name="element">The population element.</param> private static void ParsePopulationChildren(ref PopulationMetadata populationMetadata, XElement element) { foreach (var child in element.Elements()) { switch (child.Name.LocalName) { case "SelectionAlgorithm": populationMetadata.SelectionAlgorithm = ParseSelectionAlgorithm(child); break; case "TerminationConditions": populationMetadata.AddTerminationCondition(ParseTerminationConditions(child)); break; case "Chromosomes": populationMetadata.AddChromosomeMetadata(ParseChromosomes(child)); break; } } }
/// <summary> /// Parses the population attributes. /// </summary> /// <param name="populationMetadata">The population metadata.</param> /// <param name="element">The population element.</param> private static void ParsePopulationAttributes(ref PopulationMetadata populationMetadata, XElement element) { foreach (var attribute in element.Attributes()) { switch (attribute.Name.LocalName) { case "Size": populationMetadata.Size = UInt32.Parse(attribute.Value); break; case "SurvivalRate": populationMetadata.SurvivalRate = Double.Parse(attribute.Value); break; case "DistanceThreshold": populationMetadata.DistanceThreshold = Double.Parse(attribute.Value); break; case "CooperativeCoevolution": populationMetadata.CooperativeCoevolution = Boolean.Parse(attribute.Value); break; } } }