-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathelo.py
More file actions
29 lines (25 loc) · 917 Bytes
/
elo.py
File metadata and controls
29 lines (25 loc) · 917 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class ELO:
"""
https://en.wikipedia.org/wiki/Elo_rating_system#Mathematical_details
"""
@staticmethod
def expected_result(elo_a, elo_b):
expect_a = 1.0 / (1 + 10 ** ((elo_b - elo_a) / 400))
return expect_a
@staticmethod
def update_elo(winner_elo, loser_elo):
mean_elo = (winner_elo + loser_elo) / 2
k_factor = 16
if mean_elo < 2100:
k_factor = 32
elif 2100 >= mean_elo >= 2400:
k_factor = 24
expected_win = ELO.expected_result(winner_elo, loser_elo)
change_in_elo = round(k_factor * (1 - expected_win))
winner_elo += change_in_elo
loser_elo -= change_in_elo
return winner_elo, loser_elo
@staticmethod
def probabilities_elo(player0_elo, player1_elo):
elo_sum = player0_elo + player1_elo
return player0_elo * 100 / elo_sum, player1_elo * 100 / elo_sum