public object Calculation([FromBody] InputParameters inputParameters)
        {
            var adapted    = new Stats(inputParameters.NumberOfIterations);
            var notadapted = new Stats(inputParameters.NumberOfIterations);

            for (var i = 0; i < inputParameters.NumberOfIterations; i++)
            {
                var adaptedAloha = new AdaptedSlottedAloha.Engine(
                    inputParameters.NumberOfStations,
                    inputParameters.InputFlow,
                    inputParameters.NumberOfFrames, true);

                adapted.PackagesGenerated[i]           = adaptedAloha.Statistics.PackagesGenerated;
                adapted.PackagesLeavedSystem[i]        = adaptedAloha.Statistics.PackagesLeavedSystem;
                adapted.Collisions[i]                  = adaptedAloha.Statistics.Collisions;
                adapted.BackloggedPackages[i]          = adaptedAloha.Statistics.BackloggedPackages;
                adapted.AverageOfBackloggedPackages[i] = adaptedAloha.Statistics.AverageOfBackloggedPackages;
                adapted.AverageOfPackagesLifeTime[i]   = adaptedAloha.Statistics.AverageOfPackagesLifeTime;


                var notAdaptedAloha = new AdaptedSlottedAloha.Engine(
                    inputParameters.NumberOfStations,
                    inputParameters.InputFlow,
                    inputParameters.NumberOfFrames, false);

                notadapted.PackagesGenerated[i]           = notAdaptedAloha.Statistics.PackagesGenerated;
                notadapted.PackagesLeavedSystem[i]        = notAdaptedAloha.Statistics.PackagesLeavedSystem;
                notadapted.Collisions[i]                  = notAdaptedAloha.Statistics.Collisions;
                notadapted.BackloggedPackages[i]          = notAdaptedAloha.Statistics.BackloggedPackages;
                notadapted.AverageOfBackloggedPackages[i] = notAdaptedAloha.Statistics.AverageOfBackloggedPackages;
                notadapted.AverageOfPackagesLifeTime[i]   = notAdaptedAloha.Statistics.AverageOfPackagesLifeTime;
            }

            var adaptedAverage = new AverageStats
            {
                PackagesGenerated           = adapted.PackagesGenerated.Average(),
                PackagesLeavedSystem        = adapted.PackagesLeavedSystem.Average(),
                Collisions                  = adapted.Collisions.Average(),
                BackloggedPackages          = adapted.BackloggedPackages.Average(),
                AverageOfBackloggedPackages = adapted.AverageOfBackloggedPackages.Average(),
                AverageOfPackagesLifeTime   = adapted.AverageOfPackagesLifeTime.Average()
            };
            var notadaptedAverage = new AverageStats
            {
                PackagesGenerated           = notadapted.PackagesGenerated.Average(),
                PackagesLeavedSystem        = notadapted.PackagesLeavedSystem.Average(),
                Collisions                  = notadapted.Collisions.Average(),
                BackloggedPackages          = notadapted.BackloggedPackages.Average(),
                AverageOfBackloggedPackages = notadapted.AverageOfBackloggedPackages.Average(),
                AverageOfPackagesLifeTime   = notadapted.AverageOfPackagesLifeTime.Average()
            };

            var outputResults = new OutputResults <AverageStats>
            {
                Adapted    = adaptedAverage,
                NotAdapted = notadaptedAverage,
            };

            return(outputResults);
        }
Ejemplo n.º 2
0
        public static List <Tuple <PlayerData, AverageStats> > GenerateAverageDataSet(List <string> bosses, List <PlayerClass> classLimits, List <PlayerFaction> factionLimits, WowRealm realm, string guildLimit)
        {
            var summaryDatabase = ApplicationInstance.Instance.GetSummaryDatabase();

            if (summaryDatabase == null)
            {
                return(null);
            }

            var realmDB = ApplicationInstance.Instance.GetRealmDB(VF_RealmPlayersDatabase.WowRealm.Nostalrius);

            var orderedPlayers = summaryDatabase.PlayerSummaries.OrderBy(_Value => _Value.Key); //Order by realm to avoid changing realmDB all the time

            List <Tuple <PlayerData, AverageStats> > dataset = new List <Tuple <PlayerData, AverageStats> >();

            Func <TotalPlayerBossStats, float> getDPSFunc          = (_Value) => _Value.GetAverageDPS(5, 6, 3);
            Func <TotalPlayerBossStats, float> getEffectiveHPSFunc = (_Value) => _Value.GetAverageEffectiveHPS(5, 6, 3);

            foreach (var playerSummary in orderedPlayers)
            {
                if (playerSummary.Value.AttendedFights.Count == 0)
                {
                    continue;
                }
                var currGroup = playerSummary.Value.AttendedFights.Last().CacheRaid.CacheGroup;

                if (guildLimit != null && guildLimit != currGroup.GroupName)
                {
                    continue;
                }

                if (realm != VF_RealmPlayersDatabase.WowRealm.All && realm != currGroup.Realm)
                {
                    continue;
                }

                if (currGroup.Realm != realmDB.Realm)
                {
                    realmDB = ApplicationInstance.Instance.GetRealmDB(currGroup.Realm);
                }

                var playerData = realmDB.FindPlayer(playerSummary.Value.Name);
                if (playerData != null && (classLimits == null || classLimits.Contains(playerData.Character.Class)) &&
                    (factionLimits == null || factionLimits.Contains(StaticValues.GetFaction(playerData.Character.Race))))
                {
                    AverageStats averageStats = new AverageStats();

                    Func <string, bool> includeBossFunc = (_Value) => { return(bosses.Contains(_Value)); };

                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(bosses.Count, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(bosses.Count, getEffectiveHPSFunc, includeBossFunc);

                    dataset.Add(Tuple.Create(playerData, averageStats));
                }
            }
            return(dataset);
        }
Ejemplo n.º 3
0
        public void ConstructTestFromExtractedValueTest()
        {
            string       docURI = string.Format(@"{0}/Resources/StaticSnapShot.html", Directory.GetCurrentDirectory());
            HtmlDocument doc    = new HtmlDocument();

            doc.Load(docURI);

            var StatRetriever          = new AverageStatRetriever(doc);
            var initialExtractedValues = StatRetriever.ExtractAverageStats();

            var actualObject   = new AverageStats().ConstructAverageStats(initialExtractedValues);
            var expectedObject = createTestAverageObject();

            Assert.AreEqual(expectedObject.MeleeFinalBlows, actualObject.MeleeFinalBlows, "Melee Final Blows not correctly mapped");
            Assert.AreEqual(expectedObject.TimeSpentOnFire, actualObject.TimeSpentOnFire, "Time Spent On Fire not correctly mapped");
            Assert.AreEqual(expectedObject.SoloKills, actualObject.SoloKills, "Solo Kills not correctly mapped");
            Assert.AreEqual(expectedObject.ObjectiveKills, actualObject.ObjectiveKills, "Objective Kills not correctly mapped");
            Assert.AreEqual(expectedObject.ObjectiveTime, actualObject.ObjectiveTime, "Objective Time not correctly mapped");
            Assert.AreEqual(expectedObject.HealingDone, actualObject.HealingDone, "Healing Done not correctly mapped");
            Assert.AreEqual(expectedObject.FinalBlows, actualObject.FinalBlows, "Final Blows not correctly mapped");
            Assert.AreEqual(expectedObject.Deaths, actualObject.Deaths, "Deaths not correctly mapped");
            Assert.AreEqual(expectedObject.Eliminations, actualObject.Eliminations, "Eliminations not correctly mapped");
        }
Ejemplo n.º 4
0
        public IActionResult Get()
        {
            var statsList  = context.Stats.ToList();
            var statsCount = statsList.Count();

            var singlesGames = context.GamePlayer.Where(gp => gp.Singles == true).ToList().Count();
            var singlesWins  = context.GamePlayer.Where(gp => gp.Singles == true && gp.Won == true).ToList().Count();
            var doublesGames = context.GamePlayer.Where(gp => gp.Singles == false).ToList().Count();
            var doublesWins  = context.GamePlayer.Where(gp => gp.Singles == false && gp.Won == true).ToList().Count();

            double winPercentCounter        = 0;
            double singlesWinPercentCounter = 0;
            double doublesWinPercentCounter = 0;
            double pointDiffCounter         = 0;
            double winCounter    = 0;
            double lossCounter   = 0;
            double ratingCounter = 0;

            foreach (Stats s in statsList)
            {
                s.CalculateStats(context);
                if (Double.IsNaN((double)s.WinPercentage))
                {
                    s.WinPercentage = 0;
                }
                if (s.SinglesWinPercentage == null)
                {
                    s.SinglesWinPercentage = 0;
                }
                if (s.DoublesWinPercentage == null)
                {
                    s.DoublesWinPercentage = 0;
                }
                if (Double.IsNaN((double)s.AvgPointDiff))
                {
                    s.AvgPointDiff = 0;
                }
                if (Double.IsNaN((double)s.Rating))
                {
                    s.Rating = 0;
                }

                winCounter  = winCounter + s.Wins;
                lossCounter = lossCounter + s.Losses;
                singlesWinPercentCounter = singlesWinPercentCounter + (double)s.SinglesWinPercentage;
                doublesWinPercentCounter = doublesWinPercentCounter + (double)s.DoublesWinPercentage;
                winPercentCounter        = winPercentCounter + (double)s.WinPercentage;
                winPercentCounter        = winPercentCounter + (double)s.WinPercentage;
                pointDiffCounter         = pointDiffCounter + (double)s.AvgPointDiff;
                ratingCounter            = ratingCounter + (double)s.Rating;
            }

            var averageStats = new AverageStats()
            {
                Wins                 = winCounter / statsCount,
                Losses               = lossCounter / statsCount,
                WinPercentage        = winPercentCounter / statsCount,
                SinglesWinPercentage = singlesWinPercentCounter / statsCount,
                DoublesWinPercentage = doublesWinPercentCounter / statsCount,
                AvgPointDiff         = pointDiffCounter / statsCount,
                Rating               = ratingCounter / statsCount
            };

            return(Ok(averageStats));
        }
Ejemplo n.º 5
0
        public static List <Tuple <PlayerData, AverageStats> > GenerateAverageDataSet(string bossName, string instanceName, List <PlayerClass> classLimits, List <PlayerFaction> factionLimits, WowRealm realm, string guildLimit)
        {
            var summaryDatabase = ApplicationInstance.Instance.GetSummaryDatabase();

            if (summaryDatabase == null)
            {
                return(null);
            }

            var realmDB = ApplicationInstance.Instance.GetRealmDB(VF_RealmPlayersDatabase.WowRealm.Nostalrius);

            var orderedPlayers = summaryDatabase.PlayerSummaries.OrderBy(_Value => _Value.Key); //Order by realm to avoid changing realmDB all the time

            List <Tuple <PlayerData, AverageStats> > dataset = new List <Tuple <PlayerData, AverageStats> >();

            //DateTime activePlayerDateTimeLimit = DateTime.Now.AddMonths(-2);
            //DateTime activePlayerDateTimeLimit = DateTime.Now.AddMonths(-2);

            Func <TotalPlayerBossStats, float> getDPSFunc          = (_Value) => _Value.GetAverageDPS(5, 6, 3);
            Func <TotalPlayerBossStats, float> getEffectiveHPSFunc = (_Value) => _Value.GetAverageEffectiveHPS(5, 6, 3);

            foreach (var playerSummary in orderedPlayers)
            {
                if (playerSummary.Value.AttendedFights.Count == 0)
                {
                    continue;
                }
                var currGroup = playerSummary.Value.AttendedFights.Last().CacheRaid.CacheGroup;

                if (guildLimit != null && guildLimit != currGroup.GroupName)
                {
                    continue;
                }

                if (realm != VF_RealmPlayersDatabase.WowRealm.All && realm != currGroup.Realm)
                {
                    continue;
                }

                if (currGroup.Realm != realmDB.Realm)
                {
                    realmDB = ApplicationInstance.Instance.GetRealmDB(currGroup.Realm);
                }

                AverageStats averageStats = new AverageStats();
                //if (bossName == "All")
                //{
                //    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(10, getDPSFunc, null, activePlayerDateTimeLimit);
                //    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(10, getEffectiveHPSFunc, null, activePlayerDateTimeLimit);
                //}
                //else
                if (instanceName == "Naxxramas - All Quarters")
                {
                    Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Naxxramas" && _Value != "Sapphiron" && _Value != "Kel'Thuzad"); };
                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(13, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(13, getEffectiveHPSFunc, includeBossFunc);
                }
                else if (instanceName == "AQ40" || instanceName == "Ahn'Qiraj Temple")
                {
                    Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Ahn'Qiraj Temple"); };
                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(9, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(9, getEffectiveHPSFunc, includeBossFunc);
                }
                else if (instanceName == "BWL" || instanceName == "Blackwing Lair")
                {
                    Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Blackwing Lair"); };
                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(8, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(8, getEffectiveHPSFunc, includeBossFunc);
                }
                else if (instanceName == "MC" || instanceName == "Molten Core")
                {
                    Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Molten Core"); };
                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(10, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(10, getEffectiveHPSFunc, includeBossFunc);
                }
                else if (instanceName == "ZG" || instanceName == "Zul'Gurub")
                {
                    Func <string, bool> includeBossFunc = (_Value) =>
                    {
                        return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Zul'Gurub" &&
                               _Value != "Gahz'ranka" && //Doesnt work so lets skip it
                               _Value != "Gri'lek" && _Value != "Renataki" && _Value != "Hazza'rah" && _Value != "Wushoolay"); //Not reliable
                    };
                    averageStats.m_DPS = playerSummary.Value.GenerateTotalAverageData(8, getDPSFunc, includeBossFunc);
                    averageStats.m_HPS = playerSummary.Value.GenerateTotalAverageData(8, getEffectiveHPSFunc, includeBossFunc);
                }
                else if (instanceName == "All")
                {
                    float bwlDPS, bwlHPS;
                    float mcDPS, mcHPS;
                    float zgDPS, zgHPS;
                    {
                        //BWL
                        Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Blackwing Lair"); };
                        bwlDPS = playerSummary.Value.GenerateTotalAverageData(8, getDPSFunc, includeBossFunc);
                        bwlHPS = playerSummary.Value.GenerateTotalAverageData(8, getEffectiveHPSFunc, includeBossFunc);
                    }
                    {
                        //MC
                        Func <string, bool> includeBossFunc = (_Value) => { return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Molten Core"); };
                        mcDPS = playerSummary.Value.GenerateTotalAverageData(10, getDPSFunc, includeBossFunc);
                        mcHPS = playerSummary.Value.GenerateTotalAverageData(10, getEffectiveHPSFunc, includeBossFunc);
                    }
                    {
                        //ZG
                        Func <string, bool> includeBossFunc = (_Value) =>
                        {
                            return(VF_RaidDamageDatabase.BossInformation.BossFights[_Value] == "Zul'Gurub" &&
                                   _Value != "Gahz'ranka" && //Doesnt work so lets skip it
                                   _Value != "Gri'lek" && _Value != "Renataki" && _Value != "Hazza'rah" && _Value != "Wushoolay"); //Not reliable
                        };
                        zgDPS = playerSummary.Value.GenerateTotalAverageData(8, getDPSFunc, includeBossFunc);
                        zgHPS = playerSummary.Value.GenerateTotalAverageData(8, getEffectiveHPSFunc, includeBossFunc);
                    }

                    {
                        //Average it
                        //averageStats.m_DPS = (bwlDPS * 0.5f + mcDPS * 0.3f + zgDPS * 0.2f);
                        //averageStats.m_HPS = (bwlHPS * 0.5f + mcHPS * 0.3f + zgHPS * 0.2f);

                        averageStats.m_DPS = (bwlDPS + mcDPS + zgDPS) / 3;
                        averageStats.m_HPS = (bwlHPS + mcHPS + zgHPS) / 3;
                    }
                }
                else
                {
                    var bossStats = playerSummary.Value.GetBossStats(bossName);
                    if (bossStats == null)
                    {
                        continue;
                    }
                    if ((bossStats.m_PlayerFightDatas.Count > 0 &&
                         bossStats.m_PlayerFightDatas.First().CacheBossFight.StartDateTime > DateTime.Now.AddMonths(-1)) ||
                        playerSummary.Value.GetLatestAttendedBossFightDateTime(bossName) > DateTime.Now.AddMonths(-1))
                    {
                        averageStats.m_DPS = getDPSFunc(bossStats);
                        averageStats.m_HPS = getEffectiveHPSFunc(bossStats);
                    }
                }

                var playerData = realmDB.FindPlayer(playerSummary.Value.Name);
                if (playerData != null && (classLimits == null || classLimits.Contains(playerData.Character.Class)) &&
                    (factionLimits == null || factionLimits.Contains(StaticValues.GetFaction(playerData.Character.Race))))
                {
                    dataset.Add(Tuple.Create(playerData, averageStats));
                }
            }
            return(dataset);
        }