Ejemplo n.º 1
0
 def test_chinese_handicap_handling(self):
     intermediate_board = utils_test.load_board('''
   .........
   .........
   ......X..
   .........
   .........
   .........
   .........
   .........
   .........
 ''')
     intermediate_position = go.Position(
         utils_test.BOARD_SIZE,
         intermediate_board,
         n=1,
         komi=5.5,
         caps=(0, 0),
         recent=(go.PlayerMove(go.BLACK,
                               coords.from_kgs(utils_test.BOARD_SIZE,
                                               'G7')), ),
         to_play=go.BLACK,
     )
     final_board = utils_test.load_board('''
   ....OX...
   .O.OOX...
   O.O.X.X..
   .OXXX....
   OX...XX..
   .X.XXO...
   X.XOOXXX.
   XXXO.OOX.
   .XOOX.O..
 ''')
     final_position = go.Position(
         utils_test.BOARD_SIZE,
         final_board,
         n=50,
         komi=5.5,
         caps=(7, 2),
         ko=None,
         recent=(
             go.PlayerMove(go.WHITE,
                           coords.from_kgs(utils_test.BOARD_SIZE, 'E9')),
             go.PlayerMove(go.BLACK,
                           coords.from_kgs(utils_test.BOARD_SIZE, 'F9')),
         ),
         to_play=go.WHITE)
     positions_w_context = list(
         replay_sgf(utils_test.BOARD_SIZE, CHINESE_HANDICAP_SGF))
     self.assertEqualPositions(intermediate_position,
                               positions_w_context[1].position)
     self.assertEqual(positions_w_context[1].next_move,
                      coords.from_kgs(utils_test.BOARD_SIZE, 'C3'))
     final_replayed_position = positions_w_context[-1].position.play_move(
         positions_w_context[-1].next_move)
     self.assertEqualPositions(final_position, final_replayed_position)
 def test_translate_sgf_move(self):
     self.assertEqual(
         ";B[db]",
         translate_sgf_move(go.PlayerMove(go.BLACK, (1, 3))))
     self.assertEqual(
         ";W[aa]",
         translate_sgf_move(go.PlayerMove(go.WHITE, (0, 0))))
     self.assertEqual(
         ";W[]",
         translate_sgf_move(go.PlayerMove(go.WHITE, None)))
Ejemplo n.º 3
0
 def test_japanese_handicap_handling(self):
     intermediate_board = utils_test.load_board('''
   .........
   .........
   ......X..
   .........
   ....O....
   .........
   ..X......
   .........
   .........
 ''')
     intermediate_position = go.Position(
         utils_test.BOARD_SIZE,
         intermediate_board,
         n=1,
         komi=5.5,
         caps=(0, 0),
         recent=(go.PlayerMove(go.WHITE,
                               coords.from_kgs(utils_test.BOARD_SIZE,
                                               'E5')), ),
         to_play=go.BLACK,
     )
     final_board = utils_test.load_board('''
   .........
   .........
   ......X..
   .........
   ....O....
   .........
   ..XX.....
   .........
   .........
 ''')
     final_position = go.Position(
         utils_test.BOARD_SIZE,
         final_board,
         n=2,
         komi=5.5,
         caps=(0, 0),
         recent=(
             go.PlayerMove(go.WHITE,
                           coords.from_kgs(utils_test.BOARD_SIZE, 'E5')),
             go.PlayerMove(go.BLACK,
                           coords.from_kgs(utils_test.BOARD_SIZE, 'D3')),
         ),
         to_play=go.WHITE,
     )
     positions_w_context = list(
         replay_sgf(utils_test.BOARD_SIZE, JAPANESE_HANDICAP_SGF))
     self.assertEqualPositions(intermediate_position,
                               positions_w_context[1].position)
     final_replayed_position = positions_w_context[-1].position.play_move(
         positions_w_context[-1].next_move)
     self.assertEqualPositions(final_position, final_replayed_position)
Ejemplo n.º 4
0
 def test_translate_sgf_move(self):
     self.assertEqual(
         ';B[db]', translate_sgf_move(go.PlayerMove(go.BLACK, (1, 3)),
                                      None))
     self.assertEqual(
         ';W[aa]', translate_sgf_move(go.PlayerMove(go.WHITE, (0, 0)),
                                      None))
     self.assertEqual(
         ';W[]', translate_sgf_move(go.PlayerMove(go.WHITE, None), None))
     self.assertEqual(
         ';B[db]C[comment]',
         translate_sgf_move(go.PlayerMove(go.BLACK, (1, 3)), 'comment'))
Ejemplo n.º 5
0
 def test_chinese_handicap_handling(self):
     intermediate_board = load_board('''
         .........
         .........
         ......X..
         .........
         .........
         .........
         .........
         .........
         .........
     ''')
     intermediate_position = go.Position(
         intermediate_board,
         n=1,
         komi=5.5,
         caps=(0, 0),
         recent=(go.PlayerMove(go.BLACK, pc('G7')), ),
         to_play=go.BLACK,
     )
     final_board = load_board('''
         ....OX...
         .O.OOX...
         O.O.X.X..
         .OXXX....
         OX...XX..
         .X.XXO...
         X.XOOXXX.
         XXXO.OOX.
         .XOOX.O..
     ''')
     final_position = go.Position(final_board,
                                  n=50,
                                  komi=5.5,
                                  caps=(7, 2),
                                  ko=None,
                                  recent=(
                                      go.PlayerMove(go.WHITE, pc('E9')),
                                      go.PlayerMove(go.BLACK, pc('F9')),
                                  ),
                                  to_play=go.WHITE)
     positions_w_context = list(replay_sgf(CHINESE_HANDICAP_SGF))
     self.assertEqualPositions(intermediate_position,
                               positions_w_context[1].position)
     self.assertEqual(positions_w_context[1].next_move, pc('C3'))
     self.assertEqualPositions(final_position,
                               positions_w_context[-1].position)
     self.assertFalse(positions_w_context[-1].is_usable())
     self.assertTrue(positions_w_context[-2].is_usable())
Ejemplo n.º 6
0
    def test_japanese_handicap_handling(self):
        intermediate_board = load_board('''
            .........
            .........
            ......X..
            .........
            ....O....
            .........
            ..X......
            .........
            .........
        ''')
        intermediate_position = go.Position(
            intermediate_board,
            n=1,
            komi=5.5,
            caps=(0, 0),
            recent=(go.PlayerMove(go.WHITE, pc('E5')), ),
            to_play=go.BLACK,
        )
        final_board = load_board('''
            .........
            .........
            ......X..
            .........
            ....O....
            .........
            ..XX.....
            .........
            .........
        ''')
        final_position = go.Position(
            final_board,
            n=2,
            komi=5.5,
            caps=(0, 0),
            recent=(
                go.PlayerMove(go.WHITE, pc('E5')),
                go.PlayerMove(go.BLACK, pc('D3')),
            ),
            to_play=go.WHITE,
        )

        positions_w_context = list(replay_sgf(JAPANESE_HANDICAP_SGF))
        self.assertEqualPositions(intermediate_position,
                                  positions_w_context[1].position)
        self.assertEqualPositions(final_position,
                                  positions_w_context[-1].position)
Ejemplo n.º 7
0
    def test_long_game_tree_search(self):
        player = MCTSPlayerMixin(DummyNet())
        endgame = go.Position(board=TT_FTW_BOARD,
                              n=MAX_DEPTH - 2,
                              komi=2.5,
                              ko=None,
                              recent=(go.PlayerMove(go.BLACK, (0, 1)),
                                      go.PlayerMove(go.WHITE, (0, 8))),
                              to_play=go.BLACK)
        player.initialize_game(endgame)

        # Test that an almost complete game
        for i in range(10):
            player.tree_search(num_parallel=8)
        self.assertNoPendingVirtualLosses(player.root)
        self.assertGreater(player.root.Q, 0)
Ejemplo n.º 8
0
    def test_long_game_tree_search(self):
        player = MCTSPlayerMixin(DummyNet())
        endgame = go.Position(board=TT_FTW_BOARD,
                              n=flags.FLAGS.max_game_length - 2,
                              komi=2.5,
                              ko=None,
                              recent=(go.PlayerMove(go.BLACK, (0, 1)),
                                      go.PlayerMove(go.WHITE, (0, 8))),
                              to_play=go.BLACK)
        player.initialize_game(endgame)

        # Test that MCTS can deduce that B wins because of TT-scoring
        # triggered by move limit.
        for i in range(10):
            player.tree_search(parallel_readouts=8)
        self.assertNoPendingVirtualLosses(player.root)
        self.assertGreater(player.root.Q, 0)
Ejemplo n.º 9
0
.XXOO...O
X.XOO...O
.XXOO..OO
X.XOOOOOO
.XXOOOOOO
X.XXXXXXX
XXXXXXXXX
''')

SEND_TWO_RETURN_ONE = go.Position(
    board=ALMOST_DONE_BOARD,
    n=70,
    komi=2.5,
    caps=(1, 4),
    ko=None,
    recent=(go.PlayerMove(go.BLACK, (0, 1)),
            go.PlayerMove(go.WHITE, (0, 8))),
    to_play=go.BLACK
)


class DummyNet():
    def __init__(self, fake_priors=None, fake_value=0):
        if fake_priors is None:
            fake_priors = np.ones((go.N ** 2) + 1) / (go.N ** 2 + 1)
        self.fake_priors = fake_priors
        self.fake_value = fake_value

    def run(self, position):
        return self.fake_priors, self.fake_value
Ejemplo n.º 10
0
 def to_playermove(self):
     return go.PlayerMove(self.move, self.color, None, None)