Ejemplo n.º 1
0
        public EventAnalysis(FrcEvent frc) : this()
        {
            Event     = frc;
            EventName = frc.EventName;

            foreach (Team t in frc.AllTeams)
            {
                TeamAnalysis ta = new TeamAnalysis(Event, t);
                ta.CalculateSafe();
                TeamData.Add(ta);
            }

            foreach (Match m in frc.Matches)
            {
                MatchAnalysis ma = new MatchAnalysis(Event, m, TeamData);
                ma.CalculatePregame();
                MatchData.Add(ma);
            }
        }
		public EventAnalysis(FrcEvent frc) : this()
		{
			Event = frc;
			EventName = frc.EventName;

			foreach (Team t in frc.AllTeams)
			{
				TeamAnalysis ta = new TeamAnalysis(Event, t);
				ta.CalculateSafe();
				TeamData.Add(ta);
			}

			foreach (Match m in frc.Matches)
			{
				MatchAnalysis ma = new MatchAnalysis(Event, m, TeamData);
				ma.CalculatePregame();
				MatchData.Add(ma);
			}
		}
		private void UpdateTeamAnalysis(Team team, TeamAnalysis analysis)
		{
			if (team == null || analysis == null)
			{
				TeamWorkingTxt.Text = "NULL";
				TeamWorkingTxt.Foreground = new SolidColorBrush(TITLE_GRAY);

				WinrateValText.Text = "NULL";
				WinRateZText.Text = "NULL";

				ScoredPointsValText.Text = "NULL";
				ScoredPointsZText.Text = "NULL";

				FinalScoreValText.Text = "NULL";
				FinalScoreZText.Text = "NULL";

				PenaltiesValText.Text = "NULL";
				PenaltiesZText.Text = "NULL";

				DefenseValText.Text = "NULL";
				DefenseZText.Text = "NULL";

				ResponsivenessValText.Text = "NULL";
				ResponsivenessZText.Text = "NULL";
				return;
			}

			TeamWorkingTxt.Text = analysis.WorkingCurrently ? "WORKING" : "MALFUNCTIONING";
			TeamWorkingTxt.Foreground = new SolidColorBrush(
				analysis.WorkingCurrently ? WORKING_GREEN : MALFUNCTIONING_RED);

			WinrateValText.Text = analysis.WinRate.ToStringPct();
			WinRateZText.Text = "[z = " + analysis.WinRateZ.ToString() + "]";

			ScoredPointsValText.Text = analysis.ScoredPoints.ToString();
			ScoredPointsZText.Text = "[z = " + analysis.ScoredPoints.CenterZScore.ToString() + "]";

			FinalScoreValText.Text = analysis.FinalScore.ToString();
			FinalScoreZText.Text = "[z = " + analysis.FinalScore.CenterZScore.ToString() + "]";

			PenaltiesValText.Text = analysis.Penalties.ToString();
			PenaltiesZText.Text = "[z = " + analysis.Penalties.CenterZScore.ToString() + "]";

			DefenseValText.Text = analysis.Defense.ToString();
			DefenseZText.Text = "[z = " + analysis.Defense.CenterZScore.ToString() + "]";

			ResponsivenessValText.Text = analysis.ResponsivenessRate.ToStringPct();
			ResponsivenessZText.Text = "[z = " + analysis.ResponsivenessRateZ.ToString() + "]";
		}
        /// <summary>
        /// Calculates all pregame analysis for the match
        /// </summary>
        public void CalculatePregame()
        {
            // Means of Winrates
            BlueWinRateMean = Match.BlueAlliance.ToList().ConvertAll <double>((t) =>
            {
                return(TeamAnalyses.Find((a) => a.Team == t).WinRate);
            }).Mean();

            RedWinRateMean = Match.RedAlliance.ToList().ConvertAll <double>((t) =>
            {
                return(TeamAnalyses.Find((a) => a.Team == t).WinRate);
            }).Mean();

            // Expected Winner and Advantage
            double rawAdv = BlueWinRateMean - RedWinRateMean;

            if (rawAdv == 0)
            {
                ExpectedWinner = AllianceColor.Indeterminate;
            }
            else
            {
                ExpectedWinner = (rawAdv > 0) ? AllianceColor.Blue : AllianceColor.Red;
            }
            Advantage = (rawAdv < 0) ? -rawAdv : rawAdv;

            // Expected Final Scores
            var blueAnalyses = from ta in TeamAnalyses
                               where Match.BlueAlliance.Contains(ta.Team)
                               select ta;

            BlueExpectedFinalScore = blueAnalyses.Sum((ta) => ta.FinalScore.Mean);

            BlueExpectedFinalScore = Match.BlueAlliance.ToList().ConvertAll <double>((t) =>
            {
                TeamAnalysis ta = TeamAnalyses.Find((a) => a.Team == t);
                ta.CalculateSafe();
                return(ta.FinalScore.Model.Mean);
            }).Sum();

            var redAnalyses = from ta in TeamAnalyses
                              where Match.RedAlliance.Contains(ta.Team)
                              select ta;

            RedExpectedFinalScore = redAnalyses.Sum((ta) => ta.FinalScore.Mean);

            RedExpectedFinalScore = Match.RedAlliance.ToList().ConvertAll <double>((t) =>
            {
                TeamAnalysis ta = TeamAnalyses.Find((a) => a.Team == t);
                ta.CalculateSafe();
                return(ta.FinalScore.Model.Mean);
            }).Sum();

            // Game Profile Value
            double meanWinRateAll = Match.RedAlliance.ToList().Concat(
                Match.BlueAlliance.ToList()).ToList().ConvertAll((t) =>
            {
                return(TeamAnalyses.Find((a) => a.Team == t).WinRate);
            }).Mean();
            double inverted = 1 - meanWinRateAll;

            GameProfileValue = 1 / inverted;
        }