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); }
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); }
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"); }
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)); }
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); }