def policy_moves_cmd(self, args): # if the game is already end if (self.board.check_game_end_gomoku()[0]): self.respond() return # check if still have the empty points if len(GoBoardUtil.generate_legal_moves_gomoku(self.board)) == 0: self.respond() return # use copy board cboard = self.board.copy() # check policy if self.policy_type == "random": moves = GoBoardUtil.generate_legal_moves_gomoku(self.board) moves_string = [] for move in moves: move_coord = point_to_coord(move, self.board.size) move_as_string = format_point(move_coord) moves_string.append(move_as_string) sorted_moves = ' '.join(sorted(moves_string)) self.respond("Random {}".format(sorted_moves)) else: policy, moves = PatternUtil.generate_policy_moves(cboard) moves_string = [] for move in moves: move_coord = point_to_coord(move, self.board.size) move_as_string = format_point(move_coord) moves_string.append(move_as_string) sorted_moves = ' '.join(sorted(moves_string)) self.respond(policy + " " + sorted_moves)
def get_move(self, board, color): """ Run one-player MC simulations to get a move to play """ color = board.current_player cboard = board.copy() if self.random_simulation: moves = GoBoardUtil.generate_legal_moves_gomoku(board) else: _, moves = PatternUtil.generate_policy_moves(board) move_wins = [] for move in moves: wins = self.simulate_move(cboard, move, color) move_wins.append(wins) return select_best_move(board, moves, move_wins)