Пример #1
0
    def play_game(self):

        elo = Elo()

        elo_diff = self.team1.elo - self.team2.elo
        relo_diff = self.team1.relo - self.team2.relo

        # baseline: 1.215, 1.187, 1.189, 1.1646
        if self.loc == "H":
            elo_diff += h_adv
            relo_diff += relo_h_adv
        elif self.loc == "A":
            elo_diff += h_adv
            relo_diff -= relo_h_adv

        elox = elo.get_expected(elo_diff)
        relox = elo.get_expected(relo_diff)

        self.team1.played_game()
        self.team2.played_game()

        self.team1.add_win()
        self.team2.add_loss()

        if self.reb_margin > 0:
            reb_result = 1
        elif self.reb_margin < 0:
            reb_result = 0
        elif self.reb_margin == 0:
            reb_result = 0.5

        self.team1.add_errors(1, reb_result, elox, relox)
        self.team2.add_errors(0, reb_result, (1 - elox), 1 - relox)

        # update ratings

        # else:
        #     dimv_K = 170.59 * (self.games_played ** -0.673)

        if self.games_played <= 4:
            elo_K = 60
        elif self.games_played <= 8:
            elo_K = 45
        elif self.games_played <= 12:
            elo_K = 31
        elif self.games_played <= 16:
            elo_K = 28.5
        elif self.games_played <= 20:
            elo_K = 22
        elif self.games_played <= 24:
            elo_K = 18
        elif self.games_played <= 28:
            elo_K = 18
        elif self.games_played <= 32:
            elo_K = 18
        else:
            elo_K = 18

        if self.games_played <= 4:
            relo_K = 60
        elif self.games_played <= 8:
            relo_K = 45
        elif self.games_played <= 12:
            relo_K = 31
        elif self.games_played <= 16:
            relo_K = 28.5
        elif self.games_played <= 20:
            relo_K = 22
        elif self.games_played <= 24:
            relo_K = 18
        elif self.games_played <= 28:
            relo_K = 18
        elif self.games_played <= 32:
            relo_K = 18
        else:
            relo_K = 18

        elo_delta = elo.get_mov_delta(1, elox, self.margin,
                                      (self.team1.elo - self.team2.elo), elo_K)
        relo_delta = elo.get_mov_delta(1, relox, self.reb_margin,
                                       (self.team1.relo - self.team2.relo),
                                       relo_K)

        self.team1.elo += elo_delta
        self.team1.relo += relo_delta
        self.team2.elo -= elo_delta
        self.team2.relo -= relo_delta

        return self.team1, self.team2
Пример #2
0
    def play_game(self):

        elo = Elo()

        # get expected results for all systems
        wl1 = self.team1.wl
        wl2 = self.team2.wl

        wlmx = (wl1 + (1 - wl2)) / 2

        elo_diff = self.team1.elo - self.team2.elo
        dim_diff = self.team1.dim - self.team2.dim
        mov_diff = self.team1.mov - self.team2.mov
        dimv_diff = self.team1.dimv - self.team2.dimv

        # baseline: 1.215, 1.187, 1.189, 1.1646
        if self.loc == "H":
            elo_diff += h_adv
            dim_diff += h_adv
            mov_diff += h_adv
            dimv_diff += h_adv
        elif self.loc == "A":
            elo_diff -= h_adv
            dim_diff -= h_adv
            mov_diff -= h_adv
            dimv_diff -= h_adv

        # basic elo systems
        elox = elo.get_expected(elo_diff)
        dimx = elo.get_expected(dim_diff)

        # mov systems
        movx = elo.get_expected(mov_diff)
        dimvx = elo.get_expected(dimv_diff)

        # glicko
        # glickox = glicko.get_expected(self.team1.glicko, self.team2.glicko)

        # step
        # stephx = steph.get_expected(self.team1.steph, self.team2.steph)

        self.team1.played_game()
        self.team2.played_game()

        self.team1.add_win()
        self.team2.add_loss()

        self.team1.calc_win_loss()
        self.team2.calc_win_loss()

        p1_x = {
            "wlm": wlmx,
            "elo": elox,
            "dim": dimx,
            "mov": movx,
            "dimv": dimvx,
            # "glicko":glickox,
            # "steph":stephx
        }
        p2_x = {
            "wlm": 1 - wlmx,
            "elo": 1 - elox,
            "dim": 1 - dimx,
            "mov": 1 - movx,
            "dimv": 1 - dimvx,
            # "glicko":glickox,
            # "steph":stephx
        }

        self.team1.add_errors(1, p1_x)
        self.team2.add_errors(0, p2_x)

        # update ratings
        elo_K = elo_set['K']
        elo_delta = elo.get_delta(1, elox, elo_K)

        if self.games_played <= 2:
            dim_K = 170
        elif self.games_played <= 4:
            dim_K = 97.5
        elif self.games_played <= 5:
            dim_K = 67
        elif self.games_played <= 8:
            dim_K = 67
        elif self.games_played <= 10:
            dim_K = 30
        else:
            dim_K = dim_set['K']
        dim_delta = elo.get_delta(1, dimx, dim_K)

        mov_K = mov_set['K']
        mov_delta = elo.get_mov_delta(1, movx, self.margin,
                                      (self.team1.mov - self.team2.mov), mov_K)

        if self.games_played <= 4:
            dimv_K = 60
        # else:
        #     dimv_K = 170.59 * (self.games_played ** -0.673)
        elif self.games_played <= 8:
            dimv_K = 45
        elif self.games_played <= 12:
            dimv_K = 31
        elif self.games_played <= 16:
            dimv_K = 28.5
        elif self.games_played <= 20:
            dimv_K = 22
        elif self.games_played <= 24:
            dimv_K = 18
        elif self.games_played <= 28:
            dimv_K = 18
        elif self.games_played <= 32:
            dimv_K = 18
        else:
            dimv_K = dimv_set['K']
        dimv_delta = elo.get_mov_delta(1, dimvx, self.margin,
                                       (self.team1.dimv - self.team2.dimv),
                                       dimv_K)

        self.team1.elo += elo_delta
        self.team1.dim += dim_delta
        self.team1.mov += mov_delta
        self.team1.dimv += dimv_delta

        self.team2.elo -= elo_delta
        self.team2.dim -= dim_delta
        self.team2.mov -= mov_delta
        self.team2.dimv -= dimv_delta

        return self.team1, self.team2