rwitz commited on
Commit
d5f3e47
·
1 Parent(s): a7460e5

Update elo.py

Browse files
Files changed (1) hide show
  1. elo.py +9 -13
elo.py CHANGED
@@ -14,25 +14,21 @@ def calculate_elo(old_rating, opponent_rating, score, k_factor=32):
14
  expected_score = 1 / (1 + 10 ** ((opponent_rating - old_rating) / 400))
15
  new_rating = old_rating + k_factor * (score - expected_score)
16
  return new_rating
17
-
18
  def update_elo_ratings(ratings_dataset, winner, loser, k_factor=32):
19
- """
20
- Update ELO ratings for two players in a Hugging Face dataset.
21
-
22
- :param ratings_dataset: A Hugging Face dataset of current ELO ratings.
23
- :param winner: The name of the winning player.
24
- :param loser: The name of the losing player.
25
- :param k_factor: The K-factor used in ELO rating (default is 32).
26
- :return: Updated ELO ratings as a Hugging Face dataset.
27
- """
28
- # Convert the Hugging Face dataset to a pandas DataFrame for easier manipulation
29
  ratings_df = pd.DataFrame(ratings_dataset)
30
 
 
 
 
 
 
 
31
  # Extract old ratings
32
  winner_old_rating = ratings_df.loc[ratings_df['bot_name'] == winner, 'elo_rating'].iloc[0]
33
  loser_old_rating = ratings_df.loc[ratings_df['bot_name'] == loser, 'elo_rating'].iloc[0]
34
 
35
-
36
  # Calculate new ratings
37
  winner_new_rating = calculate_elo(winner_old_rating, loser_old_rating, 1, k_factor)
38
  loser_new_rating = calculate_elo(loser_old_rating, winner_old_rating, 0, k_factor)
@@ -44,4 +40,4 @@ def update_elo_ratings(ratings_dataset, winner, loser, k_factor=32):
44
  # Convert the DataFrame back to a Hugging Face dataset
45
  updated_ratings_dataset = Dataset.from_pandas(ratings_df)
46
 
47
- return updated_ratings_dataset
 
14
  expected_score = 1 / (1 + 10 ** ((opponent_rating - old_rating) / 400))
15
  new_rating = old_rating + k_factor * (score - expected_score)
16
  return new_rating
17
+
18
  def update_elo_ratings(ratings_dataset, winner, loser, k_factor=32):
19
+ # Convert the Hugging Face dataset to a pandas DataFrame
 
 
 
 
 
 
 
 
 
20
  ratings_df = pd.DataFrame(ratings_dataset)
21
 
22
+ # Check and add new players if they don't exist in the dataset
23
+ for player in [winner, loser]:
24
+ if player not in ratings_df['bot_name'].values:
25
+ new_player = {'bot_name': player, 'elo_rating': 1200}
26
+ ratings_df = ratings_df.append(new_player, ignore_index=True)
27
+
28
  # Extract old ratings
29
  winner_old_rating = ratings_df.loc[ratings_df['bot_name'] == winner, 'elo_rating'].iloc[0]
30
  loser_old_rating = ratings_df.loc[ratings_df['bot_name'] == loser, 'elo_rating'].iloc[0]
31
 
 
32
  # Calculate new ratings
33
  winner_new_rating = calculate_elo(winner_old_rating, loser_old_rating, 1, k_factor)
34
  loser_new_rating = calculate_elo(loser_old_rating, winner_old_rating, 0, k_factor)
 
40
  # Convert the DataFrame back to a Hugging Face dataset
41
  updated_ratings_dataset = Dataset.from_pandas(ratings_df)
42
 
43
+ return updated_ratings_dataset