Exemple #1
0
        public static double VWithinMargin(double teamPerformanceDifference, double drawMargin)
        {
            double teamPerformanceDifferenceAbsoluteValue = Math.Abs(teamPerformanceDifference);
            double denominator =
                GaussianDistribution.CumulativeTo(drawMargin - teamPerformanceDifferenceAbsoluteValue) -
                GaussianDistribution.CumulativeTo(-drawMargin - teamPerformanceDifferenceAbsoluteValue);

            if (denominator < 2.222758749e-162)
            {
                if (teamPerformanceDifference < 0.0)
                {
                    return(-teamPerformanceDifference - drawMargin);
                }

                return(-teamPerformanceDifference + drawMargin);
            }

            double numerator = GaussianDistribution.At(-drawMargin - teamPerformanceDifferenceAbsoluteValue) -
                               GaussianDistribution.At(drawMargin - teamPerformanceDifferenceAbsoluteValue);

            if (teamPerformanceDifference < 0.0)
            {
                return(-numerator / denominator);
            }

            return(numerator / denominator);
        }
Exemple #2
0
        public static double VExceedsMargin(double teamPerformanceDifference, double drawMargin)
        {
            double denominator = GaussianDistribution.CumulativeTo(teamPerformanceDifference - drawMargin);

            if (denominator < 2.222758749e-162)
            {
                return(-teamPerformanceDifference + drawMargin);
            }

            return(GaussianDistribution.At(teamPerformanceDifference - drawMargin) / denominator);
        }
Exemple #3
0
        public static double WWithinMargin(double teamPerformanceDifference, double drawMargin)
        {
            double teamPerformanceDifferenceAbsoluteValue = Math.Abs(teamPerformanceDifference);
            double denominator = GaussianDistribution.CumulativeTo(drawMargin - teamPerformanceDifferenceAbsoluteValue) -
                                 GaussianDistribution.CumulativeTo(-drawMargin - teamPerformanceDifferenceAbsoluteValue);

            if (denominator < 2.222758749e-162)
            {
                return(1.0);
            }

            double vt = VWithinMargin(teamPerformanceDifferenceAbsoluteValue, drawMargin);

            return(vt * vt + ((drawMargin - teamPerformanceDifferenceAbsoluteValue) *
                              GaussianDistribution.At(drawMargin - teamPerformanceDifferenceAbsoluteValue) -
                              (-drawMargin - teamPerformanceDifferenceAbsoluteValue) *
                              GaussianDistribution.At(-drawMargin - teamPerformanceDifferenceAbsoluteValue)) / denominator);
        }
Exemple #4
0
        public static double WExceedsMargin(double teamPerformanceDifference, double drawMargin)
        {
            double denominator = GaussianDistribution.CumulativeTo(teamPerformanceDifference - drawMargin);

            if (denominator < 2.222758749e-162)
            {
                if (teamPerformanceDifference < 0.0)
                {
                    return(1.0);
                }

                return(0.0);
            }

            double vWin = VExceedsMargin(teamPerformanceDifference, drawMargin);

            return(vWin * (vWin + teamPerformanceDifference - drawMargin));
        }
        /// <summary>
        /// Get the player win probability based on the player's ratings.
        /// </summary>
        /// <param name="gameInfo">The game info we are calculating for.</param>
        /// <param name="playerRating">This player's rating.</param>
        /// <param name="opponentRating">The opponent's rating.</param>
        /// <returns>The chance that this player wins the match.</returns>
        protected override double GetPlayerWinProbability(GameInfo gameInfo, double playerRating, double opponentRating)
        {
            double ratingDifference = playerRating - opponentRating;

            return(GaussianDistribution.CumulativeTo(ratingDifference / (Sqrt2 * gameInfo.Beta)));
        }