def elo_calculator(match): """generate the ELO of the match""" ELO_FACTOR = 32 ELO_PONDERATION = 400 game = Match(match) playersOldElo = {} eloPool = 0 #collect the base data to calculate the elo for player in game.players: temp = MongoInterface.get_player(player.playerName).get('elo') playersOldElo[player.playerName] = temp eloPool += temp #calculate each players elo for player in game.players: splayer = SimplifiedPlayer(MongoInterface.get_player( player.playerName)) oldElo = playersOldElo[player.playerName] if player.playerName in game.winners: newElo = oldElo + ((ELO_FACTOR * (1 - (math.pow( 10, oldElo / ELO_PONDERATION) / eloPool))) / len(game.winners)) else: newElo = oldElo + ( (ELO_FACTOR * (0 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool)))) splayer.elo = newElo splayer.save() player.elo = newElo MongoInterface.update_log(game.ident, game.toDoc()) return newElo
def elo_calculator(match): """generate the ELO of the match""" ELO_FACTOR = 32 ELO_PONDERATION = 400 game = Match(match) playersOldElo = {} eloPool = 0 # collect the base data to calculate the elo for player in game.players: temp = MongoInterface.get_player(player.playerName).get("elo") playersOldElo[player.playerName] = temp eloPool += temp # calculate each players elo for player in game.players: splayer = SimplifiedPlayer(MongoInterface.get_player(player.playerName)) oldElo = playersOldElo[player.playerName] if player.playerName in game.winners: newElo = oldElo + ( (ELO_FACTOR * (1 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool))) / len(game.winners) ) else: newElo = oldElo + ((ELO_FACTOR * (0 - (math.pow(10, oldElo / ELO_PONDERATION) / eloPool)))) splayer.elo = newElo splayer.save() player.elo = newElo MongoInterface.update_log(game.ident, game.toDoc()) return newElo
def test_generate_elo(self): generate_player_table() generate_elo() m = Match(MongoInterface.logs_col.find_one()) self.assertEqual(m.get_player("kloijh").elo, 1026.9403557437306) self.assertEqual(m.get_player("Anuski").elo, 994.9403557437306) d = generate_player_elo_curve("kloijh") self.assertEqual(d, [1026.9403557437306]) g = generate_greening_list() self.assertEqual(g, {10: 1})
def detect_bigmoney_strategy(match): """defines if one or more players in the match used the bigmoney strategy""" game = Match(match) is_big_money_flag = True for player in game.players: deck = player.deck for card in deck: if not (card in ("province", "gold", "silver", "duchy", "smithy")): is_big_money_flag = False if is_big_money_flag: player.strategy = "bigmoney" MongoInterface.update_log(game.ident, game.toDoc())
def test_match_doc_diff(self): self.maxDiff = None m = Match(LogTest.dummy) doc = {"date": LogTest.dummy.get("date"), "filename": LogTest.dummy.get("filename"), "eloGap": LogTest.dummy.get("eloGap"), "winners": LogTest.dummy.get("winners"), "cardsgonne": LogTest.dummy.get("cardsgonne"), "market": LogTest.dummy.get("market"), "trash": LogTest.dummy.get("trash"), "players": LogTest.dummy.get("players"), "log": LogTest.dummy.get("log")} self.assertEqual(m.toDoc(), doc)
def test_match_doc_diff(self): self.maxDiff = None m = Match(LogTest.dummy) doc = { "date": LogTest.dummy.get("date"), "filename": LogTest.dummy.get("filename"), "eloGap": LogTest.dummy.get("eloGap"), "winners": LogTest.dummy.get("winners"), "cardsgonne": LogTest.dummy.get("cardsgonne"), "market": LogTest.dummy.get("market"), "trash": LogTest.dummy.get("trash"), "players": LogTest.dummy.get("players"), "log": LogTest.dummy.get("log") } self.assertEqual(m.toDoc(), doc)
def generate_simplified_player(match): """generate a simplified player based on the match and save on the database""" game = Match(match) for player in game.players: splayer = SimplifiedPlayer({"name": player.playerName, "elo": 1000}) splayer.save()
def determine_winners_greening(match): """ creates a list with greening turns of winnwer players""" result = [] m = Match(match) for player in m.winners: t = find_turn("buys", victory_cards, player, m.log.turns) if t != 0: result.append(t) return result
def get_player_elo_data(playerName, match): """ return the player elo on a given match""" game = Match(match) return game.get_player(playerName).elo
def test_log(self): m = Match(LogTest.dummy) self.assertEqual([p.to_doc() for p in m.log.turns], LogTest.dummy.get("log"))
def test_player(self): m = Match(LogTest.dummy) self.assertEqual([p.toDoc() for p in m.players], LogTest.dummy.get("players"))