def what_if_game(): team1_attacker_id = request.json['team1_attacker_id'] team1_defender_id = request.json['team1_defender_id'] team2_attacker_id = request.json['team2_attacker_id'] team2_defender_id = request.json['team2_defender_id'] t1 = Team.find_or_create(team1_attacker_id, team1_defender_id) t2 = Team.find_or_create(team2_attacker_id, team2_defender_id) scenarios = [] for i in range(10): [p1_change, p2_change] = calculate_elo(10, i, t1.rating, t2.rating) rating_change = round(p1_change, 2) scenarios.append( dict(team1_score=10, team2_score=i, team1_rating_change=rating_change, team2_rating_change=-rating_change)) for i in range(9, -1, -1): [p1_change, p2_change] = calculate_elo(i, 10, t1.rating, t2.rating) rating_change = round(p1_change, 2) scenarios.append( dict(team1_score=i, team2_score=10, team1_rating_change=rating_change, team2_rating_change=-rating_change)) data = dict(team1=t1, team2=t2, scenarios=scenarios) return games_whatif_schema.jsonify(data)
def __init__(self, team1_attacker_id, team1_defender_id, team2_attacker_id, team2_defender_id, team1_score, team2_score, manual_entry): self.team1_attacker_id = team1_attacker_id self.team1_attacker = Player.query.get(team1_attacker_id) self.team1_defender_id = team1_defender_id self.team1_defender = Player.query.get(team1_defender_id) self.team2_attacker_id = team2_attacker_id self.team2_attacker = Player.query.get(team2_attacker_id) self.team2_defender_id = team2_defender_id self.team2_defender = Player.query.get(team2_defender_id) self.team1 = Team.find_or_create(team1_attacker_id, team1_defender_id) self.team1_id = self.team1.id self.team2 = Team.find_or_create(team2_attacker_id, team2_defender_id) self.team2_id = self.team2.id self.team1_score = team1_score self.team2_score = team2_score self.manual_entry = manual_entry t1_trueskill = Rating(self.team1.trueskill, self.team1.trueskill_sigma) t2_trueskill = Rating(self.team2.trueskill, self.team2.trueskill_sigma) t1_attacker_trueskill = Rating(self.team1_attacker.trueskill, self.team1_attacker.trueskill_sigma) t1_defender_trueskill = Rating(self.team1_defender.trueskill, self.team1_defender.trueskill_sigma) t2_attacker_trueskill = Rating(self.team2_attacker.trueskill, self.team2_attacker.trueskill_sigma) t2_defender_trueskill = Rating(self.team2_defender.trueskill, self.team2_defender.trueskill_sigma) if team1_score > team2_score: self.team1.wins += 1 self.team2.losses += 1 self.team1_attacker.wins += 1 self.team1_defender.wins += 1 self.team2_attacker.losses += 1 self.team2_defender.losses += 1 else: self.team2.wins += 1 self.team1.losses += 1 self.team2_attacker.wins += 1 self.team2_defender.wins += 1 self.team1_attacker.losses += 1 self.team1_defender.losses += 1 total_score = team1_score + team2_score ranks = [team2_score / total_score, team1_score / total_score] (new_t1_trueskill), (new_t2_trueskill) = rate([[t1_trueskill], [t2_trueskill]], ranks=ranks) (new_t1_atk, new_t1_def), (new_t2_atk, new_t2_def) = rate( [[t1_attacker_trueskill, t1_defender_trueskill], [t2_attacker_trueskill, t2_defender_trueskill]], ranks=ranks) self.team1_trueskill = new_t1_trueskill[0].mu self.team1_trueskill_sigma = new_t1_trueskill[0].sigma self.team1_trueskill_change = new_t1_trueskill[0].mu - t1_trueskill.mu self.team2_trueskill = new_t2_trueskill[0].mu self.team2_trueskill_sigma = new_t2_trueskill[0].sigma self.team2_trueskill_change = new_t2_trueskill[0].mu - t2_trueskill.mu self.team1.trueskill = self.team1_trueskill self.team1.trueskill_sigma = self.team1_trueskill_sigma self.team2.trueskill = self.team2_trueskill self.team2.trueskill_sigma = self.team2_trueskill_sigma self.team1_attacker_trueskill = new_t1_atk.mu self.team1_attacker_trueskill_sigma = new_t1_atk.sigma self.team1_attacker_trueskill_change = new_t1_atk.mu - t1_attacker_trueskill.mu self.team1_defender_trueskill = new_t1_def.mu self.team1_defender_trueskill_sigma = new_t1_def.sigma self.team1_defender_trueskill_change = new_t1_def.mu - t1_defender_trueskill.mu self.team2_attacker_trueskill = new_t2_atk.mu self.team2_attacker_trueskill_sigma = new_t2_atk.sigma self.team2_attacker_trueskill_change = new_t2_atk.mu - t2_attacker_trueskill.mu self.team2_defender_trueskill = new_t2_def.mu self.team2_defender_trueskill_sigma = new_t2_def.sigma self.team2_defender_trueskill_change = new_t2_def.mu - t2_defender_trueskill.mu self.team1_attacker.trueskill = self.team1_attacker_trueskill self.team1_attacker.trueskill_sigma = self.team1_attacker_trueskill_sigma self.team1_defender.trueskill = self.team1_defender_trueskill self.team1_defender.trueskill_sigma = self.team1_defender_trueskill_sigma self.team2_attacker.trueskill = self.team2_attacker_trueskill self.team2_attacker.trueskill_sigma = self.team2_attacker_trueskill_sigma self.team2_defender.trueskill = self.team2_defender_trueskill self.team2_defender.trueskill_sigma = self.team2_defender_trueskill_sigma [p1_change, p2_change] = calculate_elo(team1_score, team2_score, self.team1.rating, self.team2.rating) self.rating_change = p1_change self.team1_rating = self.team1.rating + p1_change self.team2_rating = self.team2.rating + p2_change self.team1.rating = self.team1_rating self.team2.rating = self.team2_rating