Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }