/// <summary> /// Refine clusters /// </summary> /// <param name="clusters">Collection of clusters</param> /// <param name="decks">Collection of partial decks used to refine clusters</param> /// <returns>Refined collection of clusters</returns> public List <Cluster> RefineClusters(List <Cluster> clusters, List <PartialDeck> decks) { Trace.Log(""); Trace.Log("*** Refining clusters ***"); // Group decks into clusters var clusterGroups = this.MatchDecksToClusters(clusters, decks); // Generate the next iteration for each cluster foreach (Cluster cluster in clusterGroups.Keys) { Trace.Log(""); Trace.Log("Refining cluster: " + cluster.ToString()); var matchingDecks = clusterGroups[cluster]; var cardCounter = new CardCounter(matchingDecks); this.TraceCardCounts(cardCounter, matchingDecks.Count); Cluster newCluster = new Cluster(); for (int i = 0; i < 30; i++) { newCluster.Add(cardCounter.InstanceCounts[i].CardId); } var diff = cluster.Diff(newCluster); Trace.Log("Diff: " + diff.ToString()); } return(null); }
/// <summary> /// Trace card counts /// </summary> private void TraceCardCounts(CardCounter cardCounter, int totalCount) { int i = 1; foreach (var instanceCount in cardCounter.InstanceCounts) { Trace.Log( "{4}: {0} #{1}: {2} ({3:P2})", HearthDb.Cards.All[instanceCount.CardId].Name, instanceCount.Instance, instanceCount.Count, (double)instanceCount.Count / (double)totalCount, i++); } }