def effective_model_power(checkpoint, game, model_class, sims, cuda=False):
    my_model = NeuralNetwork(game, model_class, cuda=cuda)
    my_model.load(checkpoint)
    my_player = DeepMCTSPlayer(game, my_model, sims)
    strength = 10
    num_opponents = game.get_num_players() - 1
    lost = False

    while not lost:
        contenders = [
            UninformedMCTSPlayer(game, strength) for _ in range(num_opponents)
        ]

        # Play main game
        scores, outcomes = play_match(game, [my_player] + contenders,
                                      verbose=False,
                                      permute=True)
        score, outcome = scores[my_player], outcomes[my_player]
        if outcome == "Lose": lost = True
        print("{} <{}>      Opponent strength: {}".format(
            outcome, round(score, 3), strength),
              end="")

        # Play control game
        control_player = UninformedMCTSPlayer(game, sims)
        scores, outcomes = play_match(game, [control_player] + contenders,
                                      verbose=False,
                                      permute=True)
        score, outcome = scores[control_player], outcomes[control_player]
        print("      (Control: {} <{}>)".format(outcome, round(score, 3)))

        strength *= 2  # Opponent strength doubles every turn
 def test_resets_work(self):
     game = TicTacToe()
     p1, p2 = UninformedMCTSPlayer(game, 1), UninformedMCTSPlayer(game, 1)
     for _ in range(100):
         scores, outcomes = play_match(game, [p1, p2])
         self.assertEqual(scores, {p1: 1.0, p2: 0.0})
         self.assertEqual(outcomes, {p1: "Win", p2: "Lose"})
     for _ in range(100):
         scores, outcomes = play_match(game, [p1, p2], permute=True)
         self.assertEqual(scores, {p1: 0.5, p2: 0.5})
         self.assertEqual(outcomes, {p1: "Tie", p2: "Tie"})
def rank_checkpoints(game, model_class, sims, cuda=False):
    winning_model = NeuralNetwork(game, model_class, cuda=cuda)
    contending_model = NeuralNetwork(game, model_class, cuda=cuda)
    ckpts = winning_model.list_checkpoints()
    num_opponents = game.get_num_players() - 1
    current_winner = ckpts[0]

    for contender in ckpts:

        # Load contending player
        contending_model.load(contender)
        contending_player = DeepMCTSPlayer(game, contending_model, sims)

        # Load winning player
        winning_model.load(current_winner)
        winners = [
            DeepMCTSPlayer(game, winning_model, sims)
            for _ in range(num_opponents)
        ]

        scores, outcomes = play_match(game, [contending_player] + winners,
                                      verbose=False,
                                      permute=True)
        score, outcome = scores[contending_player], outcomes[contending_player]
        print("Current Champ: {}    Challenger: {}    Outcome: {} <{}>    ".
              format(current_winner, contender, outcome, score),
              end="")
        if outcome == "Win":
            current_winner = contender
        print("New Champ: {}".format(current_winner))
 def test_three_permutation(self):
     game = ThreePlayerLeapFrog()
     p1, p2, p3 = UninformedMCTSPlayer(game, 1), UninformedMCTSPlayer(
         game, 1), UninformedMCTSPlayer(game, 1)
     scores, outcomes = play_match(game, [p1, p2, p3], permute=True)
     self.assertEqual(scores, {p1: 1 / 3, p2: 1 / 3, p3: 1 / 3})
     self.assertEqual(outcomes, {p1: "Tie", p2: "Tie", p3: "Tie"})
 def test_three_simple(self):
     game = ThreePlayerLeapFrog()
     p1, p2, p3 = UninformedMCTSPlayer(game, 1), UninformedMCTSPlayer(
         game, 1), UninformedMCTSPlayer(game, 1)
     scores, outcomes = play_match(game, [p1, p2, p3])
     self.assertEqual(scores, {p1: 0.0, p2: 0.0, p3: 1.0})
     self.assertEqual(outcomes, {p1: "Lose", p2: "Lose", p3: "Win"})
def evaluate_against_uninformed(checkpoint,
                                game,
                                model_class,
                                my_sims,
                                opponent_sims,
                                cuda=False):
    my_model = NeuralNetwork(game, model_class, cuda=cuda)
    my_model.load(checkpoint)
    num_opponents = game.get_num_players() - 1
    uninformeds = [
        UninformedMCTSPlayer(game, opponent_sims) for _ in range(num_opponents)
    ]
    informed = DeepMCTSPlayer(game, my_model, my_sims)
    scores = play_match(game, [informed] + uninformeds, permute=True)
    print("Opponent strength: {}     Scores: {}".format(opponent_sims, scores))
def one_vs_all(checkpoint, game, model_class, sims, cuda=False):
    my_model = NeuralNetwork(game, model_class, cuda=cuda)
    my_model.load(checkpoint)
    contending_model = NeuralNetwork(game, model_class, cuda=cuda)
    ckpts = my_model.list_checkpoints()
    num_opponents = game.get_num_players() - 1

    for contender in ckpts:
        contending_model.load(contender)
        my_player = DeepMCTSPlayer(game, my_model, sims)
        contenders = [
            DeepMCTSPlayer(game, contending_model, sims)
            for _ in range(num_opponents)
        ]
        scores, outcomes = play_match(game, [my_player] + contenders,
                                      verbose=False,
                                      permute=True)
        score, outcome = scores[my_player], outcomes[my_player]
        print("Challenger:", contender, "Outcome:", outcome, score)
 def test_self_play(self):
     game = TwoPlayerGuessIt()
     p1 = UninformedMCTSPlayer(game, 4)
     scores, outcomes = play_match(game, [p1, p1], permute=True)
     self.assertEqual(len(scores), 1)
     self.assertEqual(len(outcomes), 1)
 def test_permutation(self):
     game = TicTacToe()
     p1, p2 = UninformedMCTSPlayer(game, 1), UninformedMCTSPlayer(game, 1)
     scores, outcomes = play_match(game, [p1, p2], permute=True)
     self.assertEqual(scores, {p1: 0.5, p2: 0.5})
     self.assertEqual(outcomes, {p1: "Tie", p2: "Tie"})
 def test_simple(self):
     game = TicTacToe()
     p1, p2 = UninformedMCTSPlayer(game, 1), UninformedMCTSPlayer(game, 1)
     scores, outcomes = play_match(game, [p1, p2])
     self.assertEqual(scores, {p1: 1.0, p2: 0.0})
     self.assertEqual(outcomes, {p1: "Win", p2: "Lose"})