Exemplo n.º 1
0
 def test_one_on_one_uneven(self):
     player1 = analyze.new_player('p1', 0.5)
     player2 = analyze.new_player('p2', 0.75)
     player3 = analyze.new_player('p3', 0.5)
     player4 = analyze.new_player('p4', 0.75)
     players = [player1, player2, player3, player4]
     chance_of_win = self.markov_analyzer.eval_unordered(players, 0, False)
     self.assertGreater(0.5, chance_of_win)
Exemplo n.º 2
0
 def test_two_players_uneven(self):
     player1 = analyze.new_player('p1', 0.5)
     player2 = analyze.new_player('p2', 0.75)
     players = [player1, player2]
     chain = self.markov_analyzer.build_chain(players)
     p1_state = chain.get_state( (0,0,0) )
     p1_wins = chain.get_state( (0, 'win', 0, 0) )
     p2_state = chain.get_state( (1,0,0) )
     p2_wins = chain.get_state( (1, 'win', 0, 0) )
     self.assertAlmostEqual(0.5, chain.get_transition(p1_state, p1_wins)) 
     self.assertAlmostEqual(0.75, chain.get_transition(p2_state, p2_wins)) 
     self.assertAlmostEqual(0.5, chain.get_transition(p1_state, p2_state)) 
     self.assertAlmostEqual(0.25, chain.get_transition(p2_state, p1_state)) 
Exemplo n.º 3
0
    def test_absorb_prob_matches_steady_state(self):
        player1 = analyze.new_player('p1', 0.5)
        player2 = analyze.new_player('p2', 0.75)
        players = [player1, player2]
        chain = self.markov_analyzer.build_chain(players)
        p1_state = chain.get_state( (0,7,7) )
        p1_wins = chain.get_state( (0, 'win', 0, 0) )
        p2_state = chain.get_state( (1,0,0) )
        p2_wins = chain.get_state( (1, 'win', 0, 0) )

        steady = chain.steady_state(p1_state)
        probs = chain.get_absorbing_probabilities()
        
        p1_wins_val = steady[p1_wins]
        p2_wins_val = steady[p2_wins]

        self.assertAlmostEqual(p1_wins_val, probs[p1_state][p1_wins]) 
        self.assertAlmostEqual(p2_wins_val, probs[p1_state][p2_wins]) 
Exemplo n.º 4
0
    def test_symbolic_matches_numeric(self):
        balls=3
        symbolic_player1 = {}
        symbolic_player1['sink'] = sympy.Symbol('p1_sink');
        symbolic_player1['foul_end'] = sympy.Symbol('p1_foul_end');
        symbolic_player2 = {}
        symbolic_player2['sink'] = sympy.Symbol('p2_sink');
        symbolic_player2['foul_end'] = sympy.Symbol('p2_foul_end');
        symbolic_players = [symbolic_player1, symbolic_player2]
        symbolic_chain = self.symbolic_analyzer.build_chain(symbolic_players,
                                                            ballsPerTeam=balls)

        player1 = analyze.new_player('p1', 0.5, 0.1)
        player2 = analyze.new_player('p2', 0.75, 0.2)
        players = [player1, player2]
        chain = self.analyzer.build_chain(players,
                                          ballsPerTeam=balls)

        probs = chain.get_absorbing_probabilities()
        p1_state = chain.get_state( (0, balls-1, balls-1) )

        sym_probs = symbolic_chain.get_absorbing_probabilities()
        sym_p1_state = symbolic_chain.get_state( (0, balls-1, balls-1) )
        
        steady = chain.steady_state(p1_state)
        symbolic_probs = symbolic_chain.get_absorbing_probabilities()
        sym_steady = symbolic_probs[sym_p1_state]
        
        vals = {
            symbolic_player1['sink']: 0.5,
            symbolic_player1['foul_end']: 0.1,
            symbolic_player2['sink']: 0.75,
            symbolic_player2['foul_end']: 0.2
        }

        for end_state in chain.get_end_states():
            label = end_state.label
            sym_end_state = symbolic_chain.get_state(label)
            
            self.assertAlmostEqual(steady[end_state],
                                   sym_steady[sym_end_state].subs(vals))
Exemplo n.º 5
0
def json_to_matches(matches_json):
    players_for_each_match = map(players_from_match, matches_json)
    all_player_names = set(itertools.chain(*players_for_each_match))
    player_lookup = {}
    for name in all_player_names:
        player_lookup[name] = analyze.new_player(name)

    matches = []
    for match in matches_json:
        newMatch = json_to_match(player_lookup, match)
        matches.append(newMatch)

    return matches