예제 #1
0
        h.maximizer = h.BLUE
        h.minimizer = h.RED
    else:
        print("You pressed a wrong key. Please type 'R' or 'B'.")
        print("Game is restarting!!!")
        time.sleep(2)
        h = initGame()
    return h


if __name__ == '__main__':
    game = initGame()
    game.print()

    util = UTIL(infinity=99,
                maximizer=game.maximizer,
                minimizer=game.minimizer)

    node_id = str(uuid.uuid4())
    node = {
        'id': node_id,
        'type': 'MIN',
        'children': [],
        'searched': False,
        'value': None,
        'parent_type': 'MAX',
        'board': game.board,
        'name': node_id[-3:]
    }

    while True:
예제 #2
0
        h = initGame()
    return h


if __name__ == '__main__':
    t0 = time.time()
    r1 = Rating()
    r2 = Rating()

    # bord_size = int(input("Enter the board size for experiment: "))
    FirstTable = {}
    SecondTable = {}
    game = initGame()

    util = UTIL(infinity=99,
                maximizer=game.maximizer,
                minimizer=game.minimizer)
    node_id = str(uuid.uuid4())
    node = {
        'id': node_id,
        'type': 'MIN',
        'children': [],
        'searched': False,
        'value': None,
        'parent_type': 'MAX',
        'board': game.board,
        'name': node_id[-3:]
    }
    while True:
        game.print()
        if (game.turn % 2) == 0:
예제 #3
0
    def ComputervsComputer(self, firstplayer, firstParams, secondplayer,
                           secondParams):
        t0 = time.time()
        experiment_counter = self.experiment_number
        red_wins = 0
        blue_wins = 0

        IterativeDeepeningTranspositionTable = dict(
        )  # We will store best moves for iterative deepening in here

        while experiment_counter != 0:
            game = self.initGame(self.boardsize, self.starter)
            self.clearOutput()
            game.print()

            node = Node(node_type='MIN', board_state=game.board,
                        parent=None)  # initialize node
            util = UTIL(infinity=np.inf,
                        maximizer=game.maximizer,
                        minimizer=game.minimizer)  # initialize util class
            params = {'game': game, 'node': node}

            def MCTS_Player(hyperparameters, isMaximizer):
                # First Computer's turn (MCTS)
                mcts_agent = MCTS(
                    game=game, cp=hyperparameters[0],
                    n=hyperparameters[1])  # initialize mcts agent
                move, params['node'] = mcts_agent.search(
                    params['node'], hyperparameters[2], hyperparameters[3],
                    isMaximizer)
                params['game'] = HexBoard.makeMove(move, params['game'])
                params['node'] = util.updateNode(params['node'],
                                                 params['game'])

            def IDTT_Player(hyperparameters, isMaximizer):
                # iterative deepening with 4 depth-Dijkstra
                boardState = params['node'].board.copy()
                try:
                    move = IterativeDeepeningTranspositionTable[
                        boardState.tobytes()]
                except KeyError:
                    best_value = util.iterativeDeepening(
                        params['node'], isMaximizer, hyperparameters[0],
                        hyperparameters[1])
                    move = util.getBestMove(params['node'], best_value)
                    IterativeDeepeningTranspositionTable[
                        boardState.tobytes()] = move
                params['game'] = HexBoard.makeMove(move, params['game'])
                params['node'] = util.updateNode(params['node'],
                                                 params['game'])

            FirstPlayer = MCTS_Player if firstplayer == '1' else IDTT_Player
            SecondPlayer = MCTS_Player if secondplayer == '1' else IDTT_Player

            while not game.isGameOver():
                if (game.turn % 2) == 0:
                    # This is minimizer
                    p1 = 'Red' if self.starter == 2 else 'Blue'
                    print(
                        f"First ({p1}) Player is thinking! Remaining Experiment: {experiment_counter}"
                    )
                    FirstPlayer(firstParams, isMaximizer=False)
                else:
                    # This player is maximizer
                    p2 = 'Blue' if self.starter == 2 else 'Red'
                    print(
                        f"Second ({p2}) Player is thinking! Remaining Experiment: {experiment_counter}"
                    )
                    SecondPlayer(secondParams, isMaximizer=True)
                self.clearOutput()
                game.print()

                if game.isGameOver():
                    if game.checkWin(game.BLUE):
                        self.updateRatings()
                        blue_wins += 1
                        print("!!! Blue Player Won !!!")
                    elif game.checkWin(game.RED):
                        self.updateRatings(False)
                        red_wins += 1
                        print("!!! Red Player Won !!!")

            experiment_counter -= 1
        t1 = time.time()
        totalTime = t1 - t0
        self.saveRatings()
        self.plotElo()
        self.matchStatistics(blue_wins, red_wins, totalTime, firstplayer,
                             firstParams, secondplayer, secondParams)