def generate_moves(board, use_pattern, check_selfatari):
    """
		generate a list of policy moves on board for board.current_player.
		calls function from util folder for fallback
	"""
    if use_pattern:
        if board.last_move is not None:

            # checks if atari capture possible
            single_liberty = []
            liberty_point = board._single_liberty(
                board.last_move, GoBoardUtil.opponent(board.current_player))

            if liberty_point is not None and board.check_legal(
                    liberty_point, board.current_player):
                single_liberty.append(liberty_point)

                #checks for selfatari
                single_liberty = GoBoardUtil.filter_moves(
                    board, single_liberty, check_selfatari)

                if len(single_liberty) > 0:
                    return single_liberty, "AtariCapture"

            #checks for atari defense
            defense_points = try_to_defend(board)
            defense_points = GoBoardUtil.filter_moves(board, defense_points,
                                                      check_selfatari)
            if len(defense_points) > 0:
                return defense_points, "AtariDefense"

    policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(
        board, use_pattern, check_selfatari)
    return policy_moves, type_of_move
    def policy_moves_cmd(self, args):
        """
            Return list of policy moves for the current_player of the board
        """
        # policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(self.board,
        #                                         self.go_engine.pattern,
        #                                         self.go_engine.selfatari)

        policy_moves = GoBoardUtil.generate_all_policy_moves(
            self.board, self.go_engine.pattern, self.go_engine.selfatari)
        # alphaList = []

        # for move, val in policy_moves:
        #     alphaList.append((self.board.point_to_string(move), val))

        # policy_moves = sorted(alphaList, key=lambda x: x[0])

        # if len(policy_moves) == 0:
        #     self.respond("Pass")
        # else:
        #     response = type_of_move + " " + GoBoardUtil.sorted_point_string(policy_moves, self.board.NS)
        #     self.respond(response)

        if len(policy_moves) == 0:
            self.respond("pass 1.00000")
        else:
            response = ""
            for move, prob in policy_moves:
                probability = "{0:.5f}".format(prob)
                response += self.board.point_to_string(
                    move) + " " + probability + " "
            self.respond(response)
Example #3
0
 def generate_all_policy_moves(board, pattern, check_selfatari):
     """
         generate a list of policy moves on board for board.current_player.
         Use in UI only. For playing, use generate_move_with_filter
         which is more efficient
     """
     last_move = board.last_move
     if last_move != None:
         atari_capture_list = []
         atari_capture_point = GoBoardUtil2.generate_atari_capture_move(
             board, last_move)
         if atari_capture_point != None:
             atari_capture_list.append(atari_capture_point)
             atari_capture_list = GoBoardUtil2.filter_moves(
                 board, atari_capture_list, check_selfatari)
             if len(atari_capture_list) > 0:
                 return atari_capture_list, "AtariCapture"
         atari_defense_moves = GoBoardUtil2.generate_all_atari_defense_moves(
             board, last_move)
         atari_defense_moves = GoBoardUtil2.filter_moves(
             board, atari_defense_moves, check_selfatari)
         if len(atari_defense_moves) > 0:
             return atari_defense_moves, "AtariDefense"
     return GoBoardUtil.generate_all_policy_moves(board, pattern,
                                                  check_selfatari)
 def get_move(self, board, toplay):
     # return GoBoardUtil.generate_move_with_filter(board, True, True)
     policy_moves = GoBoardUtil.generate_all_policy_moves(
         board, self.pattern, self.selfatari)
     if len(policy_moves) == 0:
         return None
     moves, probs = zip(*policy_moves)
     return np.random.choice(moves, p=probs)
 def get_move(self, board, toplay):
     # return GoBoardUtil.generate_move_with_filter(board, True, True)
     policy_moves = GoBoardUtil.generate_all_policy_moves(
         board, self.pattern, self.selfatari)
     if len(policy_moves) == 0:
         return None
     move, _ = policy_moves[0]
     return move
Example #6
0
    def genmove_cmd(self, args):
        """
        generate a move for the specified color

        Arguments
        ---------
        args[0] : {'b','w'}
            the color to generate a move for
            it gets converted to  Black --> 1 White --> 2
            color : {0,1}
            board_color : {'b','w'}
        """
        try:
            board_color = args[0].lower()
            color = GoBoardUtil.color_to_int(board_color)
            self.debug_msg("Board:\n{}\nko: {}\n".format(
                str(self.board.get_twoD_board()), self.board.ko_constraint))
            #move = self.go_engine.get_move(self.board, color)
            policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(
                self.board, self.go_engine.pattern, self.go_engine.selfatari,
                color)
            if len(policy_moves) == 0:
                self.respond("Pass")
            else:
                #print(policy_moves)
                move = policy_moves[randint(0, len(policy_moves) - 1)]
                #print(move)
                #move = GoBoardUtil.point_to_coord(move)
                #move = GoBoardUtil.sorted_point_string(policy_moves[randint(0,len(policy_moves)-1)], self.board.NS)
                #print(move)
                #print(move)
                #response = type_of_move + " " + GoBoardUtil.sorted_point_string(policy_moves, self.board.NS)
                #self.respond(response)

            if move is None:
                self.respond("pass")
                return

            if not self.board.check_legal(move, color):
                move = self.board._point_to_coord(move)
                board_move = GoBoardUtil.format_point(move)
                self.respond("Illegal move: {}".format(board_move))
                raise RuntimeError("Illegal move given by engine")

            # move is legal; play it
            self.board.move(move, color)
            self.debug_msg("Move: {}\nBoard: \n{}\n".format(
                move, str(self.board.get_twoD_board())))
            move = self.board._point_to_coord(move)
            board_move = GoBoardUtil.format_point(move)
            self.respond(board_move)
        except Exception as e:
            self.respond('Error: {}'.format(str(e)))
Example #7
0
 def policy_moves_cmd(self, args):
     """
         Return list of policy moves for the current_player of the board
     """
     policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(
         self.board, self.go_engine.pattern, self.go_engine.selfatari)
     if len(policy_moves) == 0:
         self.respond("Pass")
     else:
         response = type_of_move + " " + GoBoardUtil.sorted_point_string(
             policy_moves, self.board.NS)
         self.respond(response)
Example #8
0
 def policy_moves_cmd(self, args):
     if self.board.last_move is not None:
         if self.atari_cap():
             return
         if self.atari_def():
             return
     policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(
         self.board, self.go_engine.use_pattern,
         self.go_engine.check_selfatari)
     if len(policy_moves) == 0:
         self.respond('Pass')
     else:
         response = type_of_move + ' ' + GoBoardUtil.sorted_point_string(
             policy_moves, self.board.NS)
         self.respond(response)
Example #9
0
 def get_move(self, board, toplay):
     cboard = board.copy()
     # emptyPoints = board.get_empty_points()
     emptyPoints, _ = GoBoardUtil.generate_all_policy_moves(board, self.pattern, self.selfatari)
     moves = []
     for p in emptyPoints:
         if not GoBoardUtil.filleye_filter(board, p, toplay):
             moves.append(p)
     if not moves: # pass move only, no need to simulate
         return None
     moves.append(None) # None for Pass
     moveWins = []
     for move in moves:
         wins = self.simulateMove(board, cboard, move, toplay)
         moveWins.append(wins)
     writeMoves(board, moves, moveWins, self.num_simulation)
     return select_best_move(board, moves, moveWins)
Example #10
0
    def policy_moves_cmd(self, args):
        """
        Return list of policy moves for the current_player of the board
        """
        policy_moves = GoBoardUtil.generate_all_policy_moves(
            self.board, self.go_engine.pattern, self.go_engine.selfatari)
        if len(policy_moves) == 0:
            self.respond("pass 1.00000")
        else:
            response = ''
            #for loop that generates the string for gtp via concatenation, list implementation
            for i in range(0, len(policy_moves)):
                str_float = "%0.5f" % float(policy_moves[i][1])
                response = response + ' ' + str(
                    GoBoardUtil.sorted_point_string(
                        [policy_moves[i][0]], self.board.NS)) + ' ' + str_float

            response = response.lstrip(" ")
            self.respond(response)
Example #11
0
    def policy_moves_cmd(self, args):
        """
            Return list of policy moves for the current_player of the board
        """
        policy_moves = GoBoardUtil.generate_all_policy_moves(
            self.board, self.go_engine.pattern, self.go_engine.selfatari)
        # if len(policy_moves) == 0:
        # self.respond("Pass")
        # else:
        # response = type_of_move + " " + GoBoardUtil.sorted_point_string(policy_moves, self.board.NS)
        # self.respond(response)

        # response = GoBoardUtil.sorted_point_string(policy_moves, self.board.NS)

        if len(policy_moves) == 0:
            response = ['pass', '{:.5f}'.format(1.0)]
        else:
            response = []
            for k, v in policy_moves:
                x, y = GoBoardUtil.point_to_coord(k, self.board.NS)
                response.append(GoBoardUtil.format_point((x, y)))
                response.append('{:.5f}'.format(v))
        self.respond(' '.join(response))
Example #12
0
    def policy_moves_cmd(self, args):
        """
        Return list of policy moves for the current_player of the board
        """
        #ATARI CAPTURE
        if self.board.last_move != None:
            moves = self.last_moves_empty()
            diagonal = self.board._diag_neighbors(self.board.last_move)
            capture_moves = list(set(moves) - set(diagonal))
            capture_moves = GoBoardUtil.filter_moves(
                self.board, capture_moves, self.go_engine.check_selfatari)

            if (len(capture_moves) == 1):
                if (self.board._liberty(
                        capture_moves[0],
                        self.board._points_color(capture_moves[0])) == 1):
                    policy_moves, type_of_move = capture_moves, 'AtariCapture'
                    response = type_of_move + " " + GoBoardUtil.sorted_point_string(
                        policy_moves, self.board.NS)
                    self.respond(response)
                    # self.respond("akjhfjkasdhfkjahsd")
                    return

            # # ATARI DEFENCE
            # else:
            #     defence_moves=[]
            #     moves = self.board._neighbors(self.board.last_move)
            #     # moves.extend(board._diag_neighbors2(board.last_move))

            #     for move in moves:
            #         if(self.board._single_liberty(move,self.board.current_player)!=None):
            #             # print(self.board._single_liberty(move,self.board.current_player))
            #             # print(self.board._point_to_coord(move))
            #             defence_moves.append(self.board._single_liberty(move,self.board.current_player))

            #     if(defence_moves != []):
            #         defence_moves  = GoBoardUtil.filter_moves(self.board, defence_moves, self.go_engine.check_selfatari)
            #         policy_moves, type_of_move =  defence_moves, 'AtariDefense'
            #         response = type_of_move + " " + GoBoardUtil.sorted_point_string(policy_moves, self.board.NS)
            #         self.respond(response)
            #         return

        defence_moves = []
        lm = self.board.last_move
        if lm != None:
            current_play = self.board.current_player
            opponent = GoBoardUtil.opponent(self.board.current_player)
            for elem in self.board._neighbors(lm):
                val = GoBoardUtil.color_to_int(self.board._points_color(elem))
                if current_play == val:
                    # print(self.board._neighbors(elem))
                    # if self.board._neighbors(val) != None:
                    if (self.board._single_liberty(
                            elem, GoBoardUtil.int_to_color(val)) != None):
                        # val3 = GoBoardUtil.color_to_int(self.board._points_color(elem))
                        if self.board._liberty(
                                self.board._single_liberty(
                                    elem, GoBoardUtil.int_to_color(val)),
                                current_play) > 1:
                            defence_moves.append(
                                self.board._single_liberty(
                                    elem, GoBoardUtil.int_to_color(val)))

            ng = self.board._neighbors(lm)
            dg = self.board._diag_neighbors(self.board.last_move)
            all_ng = ng + dg
            # print(all_ng)
            count = 0
            for elem in all_ng:
                val = GoBoardUtil.color_to_int(self.board._points_color(elem))
                if opponent == val:
                    # print(self.board._single_liberty(elem, GoBoardUtil.int_to_color(val)))
                    if (self.board._single_liberty(
                            elem, GoBoardUtil.int_to_color(val)) != None):
                        # print(elem)
                        for i in self.board._neighbors(elem):
                            # print(i)
                            val2 = GoBoardUtil.color_to_int(
                                self.board._points_color(i))
                            if (val2 == opponent):
                                # print(self.board._liberty(i, GoBoardUtil.int_to_color(val2)))
                                if (self.board._liberty(
                                        i, GoBoardUtil.int_to_color(val2)) !=
                                        None):
                                    count += 1
                        # print(count)
                        if (count == 0):
                            defence_moves.append(
                                self.board._single_liberty(
                                    elem, GoBoardUtil.int_to_color(val)))
                        count = 0

        # print(self.board.co defence_moves)
        # for v in defence_moves:
        #     print(v)
        defence_moves = GoBoardUtil.filter_moves(
            self.board, defence_moves, self.go_engine.check_selfatari)
        defence_moves = GoBoardUtil.sorted_point_string(
            defence_moves, self.board.NS)
        if len(defence_moves) > 0:
            # defence_moves = GoBoardUtil.filter_moves(self.board,defence_moves, self.go_engine.check_selfatari)
            self.respond("AtariDefense " + defence_moves)
            return

        policy_moves, type_of_move = GoBoardUtil.generate_all_policy_moves(
            self.board, self.go_engine.use_pattern,
            self.go_engine.check_selfatari)
        if len(policy_moves) == 0:
            self.respond("Pass")
        else:
            response = type_of_move + " " + GoBoardUtil.sorted_point_string(
                policy_moves, self.board.NS)
            self.respond(response)
            return