def update_ranks(players, ranks): """ Update skills based on ranks from a match """ teams = [skills.Team({player.name: skills.GaussianRating(player.mu, player.sigma)}) for player in players] match = skills.Match(teams, ranks) calc = trueskill.FactorGraphTrueSkillCalculator() game_info = trueskill.TrueSkillGameInfo() updated = calc.new_ratings(match, game_info) print ("Updating ranks") for team in updated: for i in team.keys(): skill_data = team[i] update_player_skill(players, i, skill_data)
def update_skills(players, ranks): """ Update player skills based on ranks from a match """ teams = [skills.Team({player.name: skills.GaussianRating(player.mu, player.sigma)}) for player in players] match = skills.Match(teams, ranks) calc = trueskill.FactorGraphTrueSkillCalculator() game_info = trueskill.TrueSkillGameInfo() updated = calc.new_ratings(match, game_info) for team in updated: player_name, skill_data = next(iter(team.items())) #in Halite, teams will always be a team of one player player = next(player for player in players if player.name == str(player_name)) #this suggests that players should be a dictionary instead of a list player.mu = skill_data.mean player.sigma = skill_data.stdev player.update_skill() print("skill = %4f mu = %3f sigma = %3f name = %s" % (player.skill, player.mu, player.sigma, str(player_name)))