Ejemplo n.º 1
0
    def generate_move_with_filter(board, use_pattern, check_selfatari):
        """
            Arguments
            ---------
            check_selfatari: filter selfatari moves?
                Note that even if True, this filter only applies to pattern moves
            use_pattern: Use pattern policy?
        """
        if board.last_move != None:
            # AtariCapture move
            atari_capture_move = GoBoardUtil_Go3.generate_atari_capture_move(board)
            if atari_capture_move:
                return atari_capture_move

            # AtariDefense move
            atari_defense_moves = GoBoardUtil_Go3.generate_atari_defense_moves(board)
            if len(atari_defense_moves) > 0:
                return random.choice(atari_defense_moves)

        if use_pattern:
            moves = GoBoardUtil.generate_pattern_moves(board)
            move = GoBoardUtil.filter_moves_and_generate(board, moves,
                                                         check_selfatari)
            if move:
                return move
        return GoBoardUtil.generate_random_move(board, board.current_player,True)
Ejemplo n.º 2
0
 def playGame(board, color, **kwargs):
     """
         modified to use custom policy
     """
     komi = kwargs.pop('komi', 0)
     limit = kwargs.pop('limit', 1000)
     random_simulation = kwargs.pop('random_simulation', True)
     use_pattern = kwargs.pop('use_pattern', True)
     check_selfatari = kwargs.pop('check_selfatari', True)
     if kwargs:
         raise TypeError('Unexpected **kwargs: %r' % kwargs)
     for _ in range(limit):
         if random_simulation:
             move = GoBoardUtil.generate_random_move(board, color, True)
         else:
             #this uses custom move policy for simulation now
             moves, _ = Gm.generate_moves(board, use_pattern,
                                          check_selfatari)
             move = GoBoardUtil.filter_moves_and_generate(
                 board, moves, check_selfatari)
         isLegalMove = board.move(move, color)
         assert isLegalMove
         if board.end_of_game():
             break
         color = GoBoardUtil.opponent(color)
     winner, _ = board.score(komi)
     return winner