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)))
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)
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'))
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())
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)
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)
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)
.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
def to_playermove(self): return go.PlayerMove(self.move, self.color, None, None)