Esempio n. 1
0
    def play_series(self, agt1, agt2):
        player1_wins = 0
        for i in range(self.G):
            print("[{}>{}]".format("-" * i, "." * (self.G - i - 1)), end="\r")
            sm = StateManager(5)

            while not sm.is_finished():
                player = sm.game.get_current_player()
                state = np.array(
                    [np.concatenate((player, sm.game.board), axis=None)])
                if player == 1:
                    predictions = agt1.predict(state)[0]
                else:
                    predictions = agt2.predict(state)[0]

                legal_moves = sm.get_legal_moves()
                if len(sm.game.executedMoves) <= 1:
                    best_move = random.choice(legal_moves)
                else:
                    best_move = self.choose_best_move(predictions, legal_moves)
                sm.execute_move(best_move)

            if sm.get_winner() == 1:
                player1_wins += 1

        print("{} won {}/{} against {}.".format(agt1.name, player1_wins,
                                                self.G, agt2.name))
        print(np.reshape(sm.game.board, (boardsize, boardsize)))
        print(sm.game.executedMoves)
        return player1_wins
Esempio n. 2
0
    def play_series(self, agt1, agt2):
        player1_wins = 0
        for i in range(self.G):
            print("[{}>{}]".format("-" * i, "." * (self.G - i - 1)), end="\r")
            game = StateManager(size=self.get_size())

            if i == self.G - 1:
                print_game = input("Print the last game? (Y/n): ")
            else:
                print_game = "n"

            move_counter = 0
            while not game.is_game_over():
                game_state = game.get_nn_state()
                player_turn = game_state[0]

                if player_turn == 1:
                    predictions = agt1.predict(game_state)
                else:
                    predictions = agt2.predict(game_state)

                legal_moves = game.get_legal_moves()

                if move_counter < topp_random_moves * 2:
                    move = random.choice(legal_moves)
                else:
                    move = legal_moves[np.argmax(predictions)]

                game.move(move)
                move_counter += 1
                if print_game.lower() == "y":
                    game.print_board()

            if game.get_winner() == 1:
                player1_wins += 1

        print("{} won {}/{} against {}.".format(agt1.name, player1_wins,
                                                self.G, agt2.name))