Ejemplo n.º 1
0
def ts_winp(a, b, env=None):
    """Win probability of player a over b given their trueskill ratings.
    Formula found at https://github.com/sublee/trueskill/issues/1#issuecomment-244699989"""
    if not env:
        env = trueskill.global_env()
    epsilon = trueskill.calc_draw_margin(env.draw_probability, 2)
    denom = math.sqrt(a.sigma**2 + b.sigma**2 + (2 * env.beta**2))
    return phi((a.mu - b.mu - epsilon) / denom)
Ejemplo n.º 2
0
 def __init__(self, name, daily_sigma_decay=0, k=3,
              established_sigma=None, **kwargs):
     super(TrueSkillSystem, self).__init__(name)
     self.env = trueskill.TrueSkill(**kwargs)
     self.daily_sigma_decay = daily_sigma_decay
     self.established_sigma = established_sigma
     self.k = k
     self.two_p_draw_margin = trueskill.calc_draw_margin(
         self.env.draw_probability, 2, env=self.env)
Ejemplo n.º 3
0
 def __init__(self,
              name,
              daily_sigma_decay=0,
              k=3,
              established_sigma=None,
              **kwargs):
     super(TrueSkillSystem, self).__init__(name)
     self.env = trueskill.TrueSkill(**kwargs)
     self.daily_sigma_decay = daily_sigma_decay
     self.established_sigma = established_sigma
     self.k = k
     self.two_p_draw_margin = trueskill.calc_draw_margin(
         self.env.draw_probability, 2, env=self.env)
Ejemplo n.º 4
0
    def predict(self,
                teams: Tuple[str, str],
                rosters: Tuple[Roster, Roster] = None,
                drawable: bool = False) -> Tuple[float, float]:
        """Given two teams, return win/draw probabilities of them."""
        env = self.env_drawable if drawable else self.env_undrawable

        team1_ratings, team2_ratings = self._teams_ratings(teams, rosters)
        size = len(team1_ratings) + len(team2_ratings)

        delta_mu = (sum(r.mu
                        for r in team1_ratings) - sum(r.mu
                                                      for r in team2_ratings))
        draw_margin = calc_draw_margin(env.draw_probability, size, env=env)
        sum_sigma = sum(r.sigma**2
                        for r in chain(team1_ratings, team2_ratings))
        denom = sqrt(size * env.beta**2 + sum_sigma)

        p_win = env.cdf((delta_mu - draw_margin) / denom)
        p_not_loss = env.cdf((delta_mu + draw_margin) / denom)

        return p_win, p_not_loss - p_win
Ejemplo n.º 5
0
 def __init__(self, name, trueskill_env, daily_sigma_decay=0, **kwargs):
     super(RatingDeviationSystem, self).__init__(name, **kwargs)
     self.env = trueskill_env
     self.daily_sigma_decay = daily_sigma_decay
     self.draw_margin = trueskill.calc_draw_margin(
         self.env.draw_probability, 2, env=self.env)
Ejemplo n.º 6
0
 def __init__(self, name, trueskill_env, daily_sigma_decay=0, **kwargs):
     super(RatingDeviationSystem, self).__init__(name, **kwargs)
     self.env = trueskill_env
     self.daily_sigma_decay = daily_sigma_decay
     self.draw_margin = trueskill.calc_draw_margin(
         self.env.draw_probability, 2, env=self.env)
Ejemplo n.º 7
0
 def win_probability(self, player, opponent):
     delta_mu = player.rating.mu - opponent.rating.mu - calc_draw_margin(self.draw, 2, self.env)
     denom = sqrt(2 * (self.beta * self.beta) + pow(player.rating.sigma, 2) + pow(opponent.rating.sigma, 2))
     return cdf(delta_mu / denom)
Ejemplo n.º 8
0
 def __init__(self, name, trueskill_env, daily_sigma_decay=0):
     super(TrueSkillSystem, self).__init__(name)
     self.env = trueskill_env
     self.daily_sigma_decay = daily_sigma_decay
     self.draw_margin = trueskill.calc_draw_margin(
         self.env.draw_probability, 2, env=self.env)