Beispiel #1
0
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)
Beispiel #2
0
    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