public IEfficiencyRankCollection RankBattleResults(List <IPlayerBattleResult> battleResults) { IEfficiencyRankCollection efficiencyRankCollection = Factory.Get <IEfficiencyRankCollection>(); int rank = 1; battleResults = battleResults.OrderBy(result => result.Efficiency.AverageExecutionTime).ToList(); while (battleResults.Count > 0) { IPlayerBattleResult nextMostEfficient = battleResults[0]; minStdDev = battleResults[0].Efficiency.StandardDeviation; Margin = CalculateMargin(nextMostEfficient); double baseline = nextMostEfficient.Efficiency.AverageExecutionTime; IPlayerBattleResult[] resultsWithSimilarEfficiency = battleResults .Where(result => IsWithinMargin(result, baseline)) .OrderBy(result => result.Efficiency.MemoryAllocated).ToArray(); battleResults.RemoveAll(result => resultsWithSimilarEfficiency.Contains(result)); efficiencyRankCollection.Add(rank, resultsWithSimilarEfficiency); rank++; } return(efficiencyRankCollection); }
private static void BenchmarkBattle(int index) { SelectedBattle = Factory.Get <IBattleCollection>().Get(index); List <IPlayerBattleResult> battleResults = Factory.Get <IBenchmarkEngine>().PerformBenchmarking(SelectedBattle); IEfficiencyCalculator efficiencyCalculator = Factory.Get <IEfficiencyCalculator>(); IEfficiencyRankCollection ranks = efficiencyCalculator.RankBattleResults(battleResults); PrintBenchmarkingResults(ranks, efficiencyCalculator); }
private static int PrintBenchmarkHeader(IEfficiencyRankCollection efficiencyBuckets, IEfficiencyCalculator efficiencyCalculator) { Console.WriteLine(); Console.WriteLine(); string headerString = $"===== Benchmarking for '{SelectedBattle.Name}' ======"; PrintDivider(headerString.Length); Console.WriteLine(headerString); PrintDivider(headerString.Length); Console.WriteLine($"Players are grouped into ranks where each rank contains all players whose mean is {efficiencyCalculator.MarginScalar} standard deviation(s) from the most efficient mean in that rank."); Console.WriteLine(); return(headerString.Length); }
private static void PrintBenchmarkingResults(IEfficiencyRankCollection efficiencyBuckets, IEfficiencyCalculator efficiencyCalculator) { Console.ForegroundColor = INFO_COLOR; int headerLength = PrintBenchmarkHeader(efficiencyBuckets, efficiencyCalculator); int rank = 1; while (efficiencyBuckets.HasRank(rank)) { List <IPlayerBattleResult> results = efficiencyBuckets.Get(rank); Console.WriteLine($"Rank {rank}"); foreach (IPlayerBattleResult result in results) { Console.WriteLine($"\t{result.Player.Name}"); Console.WriteLine("\t\tAverage Exec Time: \t{0:0,0.000} {1}", result.Efficiency.AverageExecutionTime, timeUnits[TimeUnit]); Console.WriteLine($"\t\tMemory Allocated: \t{result.Efficiency.MemoryAllocated.ToString("N0")} {sizeUnits[SizeUnit]}"); } rank++; } PrintBenchmarkFooter(headerLength); }