Beispiel #1
0
    def simulate_random_game(game: GameState):
        bots = {Player.black: RandomBot(), Player.white: RandomBot()}

        while (not game.is_over()):
            bot_move = bots[game.next_player].select_move(game)
            game = game.apply_move(bot_move)
        return game.winner()
Beispiel #2
0
 def simulate_random_game(game: GameState) -> Player:
     bots = {
         Player.black: FastRandomAgent(),
         Player.white: FastRandomAgent(),
     }
     while not game.is_over():
         bot_move = bots[game.next_player].select_move(game)
         game = game.apply_move(bot_move)
     return cast(Player, game.winner())
Beispiel #3
0
 def get_handicap(sgf):
     go_board = Board(19, 19)
     first_move_done = False
     move = None
     game_state = GameState.new_game(19)
     if sgf.get_handicap() is not None and sgf.get_handicap() != 0:
         for setup in sgf.get_root().get_setup_stones():
             for move in setup:
                 row, col = move
                 go_board.place_stone(Player.black, Point(row + 1, col + 1))
         first_move_done = True
         game_state = GameState(go_board, Player.white, None, move)
     return game_state, first_move_done
Beispiel #4
0
    def test_new_game(self):
        start = GameState.new_game(19)
        next_state = start.apply_move(Move.play(Point(16, 16)))

        self.assertEqual(start, next_state.previous_state)
        self.assertEqual(Player.white, next_state.next_player)
        self.assertEqual(Player.black, next_state.board.get(Point(16, 16)))
Beispiel #5
0
 def select_move(self, game_state: GameState):
     best_moves: List[Move] = []
     best_score = float("-inf")
     # Loop over all legal moves.
     for possible_move in game_state.legal_moves():
         if possible_move.point and is_point_an_eye(game_state.board, possible_move.point, game_state.next_player):
             continue  # skip the eye
         next_state = game_state.apply_move(possible_move)
         result = alphabeta(next_state, False, game_state.next_player, self.max_depth, ev_fn=self.ev_fn)
         if (not best_moves) or result > best_score:
             best_moves = [possible_move]
             best_score = result
         elif result == best_score:
             best_moves.append(possible_move)
     # For variety, randomly select among all equally good moves.
     return random.choice(best_moves)
Beispiel #6
0
def main():
    board_size = 7
    game: GameState = GameState.new_game(board_size)
    bots = {
        # gotypes.Player.black: RandomBot(),
        # gotypes.Player.black: AlphaBetaAgent(max_depth=0, ev_fn=eval_fn2),
        # gotypes.Player.white: RandomAgent(),
        # gotypes.Player.black: RandomAgent(),
        # gotypes.Player.white: FastRandomAgent(),
        # gotypes.Player.black: FastRandomAgent(),
        # gotypes.Player.black: AlphaBetaAgent(max_depth=1, ev_fn=eval_fn),
        gotypes.Player.black:
        MCTSAgent(2500, temperature=1.4, parallel_rollouts=True),
        gotypes.Player.white:
        AlphaBetaAgent(max_depth=3, ev_fn=eval_fn2),
    }
    while not game.is_over():
        # time.sleep(0.5)
        bot_move = bots[game.next_player].select_move(game)
        game = game.apply_move(bot_move)

        print('\033c')  # clear terminal [Linux and OS X]
        print_board(game.board)
        print_move(game.next_player.opposite, bot_move)
        print(compute_game_result(game))

    print(compute_game_result(game))
Beispiel #7
0
 def simulate_parallel_random_games(self, game: GameState) -> List[Player]:
     game_with_nomore_than_one_parent = game
     parent = game.previous_state
     if parent is not None:
         board = copy.deepcopy(parent.board)
         parent_copy = GameState(board, parent.next_player, None, parent.last_move)
         game_with_nomore_than_one_parent.previous_state = parent_copy
     self.socket.send_pyobj(game_with_nomore_than_one_parent)
     results: List[Player] = self.socket.recv_pyobj()
     return results
Beispiel #8
0
 def __init__(self,
              game_state: GameState,
              parent: 'MCTSNode' = None,
              move: Move = None):
     self.parent = parent
     self.game_state = game_state
     self.move = move
     self.win_counts = {Player.white: 0, Player.black: 0}
     self.num_rollouts = 0
     self.children: List[MCTSNode] = []
     self.univisted_moves = game_state.legal_moves()
Beispiel #9
0
 def __init__(self, game_state: GameState, parent: MCTSNode = None, last_move: Move = None):
     self.game_state = game_state
     self.parent = parent
     self.last_move = last_move
     self.win_counts: Dict[Player, int] = {
         Player.black: 0,
         Player.white: 0,
     }
     self.num_rollouts: int = 0
     self.children: List[MCTSNode] = []
     b: Board = game_state.board
     p: Player = game_state.next_player
     moves: List[Move] = game_state.legal_moves()
     self.unvisited_moves: List[Move] = [m for m in moves if not (m.point and is_point_an_eye(b, m.point, p))]
Beispiel #10
0
def simulate_game(black_player, white_player, board_size):
    moves = []
    game = GameState.new_game(board_size)
    agents = {
        Player.black: black_player,
        Player.white: white_player,
    }
    while not game.is_over():
        next_move = agents[game.next_player].select_move(game)
        moves.append(next_move)
        game = game.apply_move(next_move)

    game_result = scoring.compute_game_result(game)

    return game_result.winner
Beispiel #11
0
 def encode(self, game_state: GameState):
     board_tensor = np.zeroes(self.shape())
     board_plane = {game_state.next_player: 0,
                    game_state.next_player.other: 3}
     for row in range(self.board_height):
         for col in range(self.board_width):
             point = Point(row+1, col+1)
             go_string = game_state.board.get_go_string(point)
             if go_string is None:
                 if game_state.does_move_violate_ko(game_state.next_player, Move(point)):
                     board_tensor[VIOLATE_KO][row][col] = 1
             else:
                 liberty_plane = min(3, go_string.num_liberties)
                 liberty_plane += board_plane[go_string.color]
                 board_tensor[liberty_plane][row][col] = 1
     return board_tensor
Beispiel #12
0
def main():
    board_size = 7
    game: GameState = GameState.new_game(board_size)
    bots = {
        # gotypes.Player.white: MCTSAgent(4000, temperature=1.4),
        gotypes.Player.white:
        MCTSAgent(5000, temperature=1.4, parallel_rollouts=True),
        gotypes.Player.black:
        MCTSAgent(5000, temperature=1.1, parallel_rollouts=True),
    }
    while not game.is_over():
        bot_move = bots[game.next_player].select_move(game)
        game = game.apply_move(bot_move)

        print('\033c')  # clear terminal [Linux and OS X]
        print_board(game.board)
        print_move(game.next_player.opposite, bot_move)
        print(compute_game_result(game))

    print(compute_game_result(game))
Beispiel #13
0
def main():
    board_size = 9
    game: GameState = GameState.new_game(board_size)
    bot: Agent = RandomAgent()

    move: Move = None
    while not game.is_over():
        print('\033c')  # clear terminal [Linux and OS X]
        if move is not None:
            print_move(game.next_player, move)
        print_board(game.board)
        if game.next_player == gotypes.Player.black:
            print(compute_game_result(game))
            human_move_str: str = input('-- ')
            try:
                point = point_from_coords(human_move_str.strip().upper())
                move = Move.play(point)
            except (ValueError, Exception):
                move = Move.pass_turn()
        else:
            move = bot.select_move(game)
        game = game.apply_move(move)
def simulate_game(black_player, white_player, board_size):
    moves = []
    game = GameState.new_game(board_size)
    agents = {
        Player.black: black_player,
        Player.white: white_player,
    }
    while not game.is_over():
        next_move = agents[game.next_player].select_move(game)
        moves.append(next_move)
        # if next_move.is_pass:
        #     print('%s passes' % name(game.next_player))
        game = game.apply_move(next_move)

    print_board(game.board)
    game_result = scoring.compute_game_result(game)
    print(game_result)

    return GameRecord(
        moves=moves,
        winner=game_result.winner,
        margin=game_result.winning_margin,
    )
Beispiel #15
0
def simulate_game(
        board_size,
        black_agent, black_collector,
        white_agent, white_collector):
    print('Starting the game!')
    game = GameState.new_game(board_size)
    agents = {
        Player.black: black_agent,
        Player.white: white_agent,
    }

    black_collector.begin_episode()
    white_collector.begin_episode()
    while not game.is_over():
        next_move = agents[game.next_player].select_move(game)
        game = game.apply_move(next_move)

    game_result = scoring.compute_game_result(game)
    if game_result.winner == Player.black:
        black_collector.complete_episode(1)
        white_collector.complete_episode(-1)
    else:
        black_collector.complete_episode(-1)
        white_collector.complete_episode(1)
Beispiel #16
0
from dlgo.goboard import GameState, Move
from dlgo.gotypes import Point
from dlgo.utils import print_board
from dlgo.gosgf.sgf import Sgf_game

sgf_content = "(;GM[1]FF[4]SZ[9];B[ee];W[ef];B[ff];W[df];B[fe];W[fc];B[ec];W[gd];B[fb])"

sgf_game = Sgf_game.from_string(sgf_content)

game_state = GameState.new_game(19)

for item in sgf_game.main_sequence_iter():

    color, move_tuple = item.get_move()
    if color is not None and move_tuple is not None:
        row, col = move_tuple
        point = Point(row + 1, col + 1)
        move = Move.play(point)
        game_state = game_state.apply_move(move)
        print_board(game_state.board)