public static MetricWeights ReadMetricWeightsXml(XmlReader xmlReader) { if (null == xmlReader) { throw new ArgumentNullException("xmlReader"); } MetricWeights mw = new MetricWeights(); while (xmlReader.Read()) { if (xmlReader.IsStartElement() && !xmlReader.Name.EndsWith("MetricWeights")) { string key = xmlReader.Name; double value = xmlReader.ReadElementContentAsDouble(); BugType bugType; BugTypeWeight bugTypeWeight; if (TryParseKeyName(key, out bugType, out bugTypeWeight)) { mw.Set(bugType, bugTypeWeight, value + mw.Get(bugType, bugTypeWeight)); } } } return(mw); }
private MetricWeights GetGradient(BoardMetrics boardMetrics) { MetricWeights gradient = new MetricWeights(); foreach (PieceName pieceName in EnumUtils.PieceNames) { BugType bugType = EnumUtils.GetBugType(pieceName); double colorValue = EnumUtils.GetColor(pieceName) == PlayerColor.White ? 1.0 : -1.0; gradient.Set(bugType, BugTypeWeight.InPlayWeight, gradient.Get(bugType, BugTypeWeight.InPlayWeight) + colorValue * boardMetrics[pieceName].InPlay); gradient.Set(bugType, BugTypeWeight.IsPinnedWeight, gradient.Get(bugType, BugTypeWeight.IsPinnedWeight) + colorValue * boardMetrics[pieceName].IsPinned); gradient.Set(bugType, BugTypeWeight.IsCoveredWeight, gradient.Get(bugType, BugTypeWeight.IsCoveredWeight) + colorValue * boardMetrics[pieceName].IsCovered); gradient.Set(bugType, BugTypeWeight.NoisyMoveWeight, gradient.Get(bugType, BugTypeWeight.NoisyMoveWeight) + colorValue * boardMetrics[pieceName].NoisyMoveCount); gradient.Set(bugType, BugTypeWeight.QuietMoveWeight, gradient.Get(bugType, BugTypeWeight.QuietMoveWeight) + colorValue * boardMetrics[pieceName].QuietMoveCount); gradient.Set(bugType, BugTypeWeight.FriendlyNeighborWeight, gradient.Get(bugType, BugTypeWeight.FriendlyNeighborWeight) + colorValue * boardMetrics[pieceName].FriendlyNeighborCount); gradient.Set(bugType, BugTypeWeight.EnemyNeighborWeight, gradient.Get(bugType, BugTypeWeight.EnemyNeighborWeight) + colorValue * boardMetrics[pieceName].EnemyNeighborCount); } return(gradient); }