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:
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:
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)