예제 #1
0
파일: mcts.py 프로젝트: xiao-liu/zeta-go
class TreeNode:
    def __init__(self, parent, action, evaluator, conf):
        if parent is None:
            self.go = Go(board_size=conf.BOARD_SIZE, komi=conf.KOMI)
        else:
            self.go = Go(copy=parent.go)
            if action == conf.PASS:
                self.go.pass_()
            else:
                self.go.play(*divmod(action, conf.BOARD_SIZE))
        self.parent = parent
        self.children = [None] * conf.NUM_ACTIONS
        self.action = action
        self.n = np.zeros(conf.NUM_ACTIONS, dtype=np.int)
        self.w = np.zeros(conf.NUM_ACTIONS, dtype=np.float32)
        self.p, self.v = predict(evaluator, self, conf, random_trans=True)
예제 #2
0
    def test_play_game(self):
        go = Go(size=11)
        go.play(5, 5)
        expected_board = '\n'.join([
            '|             |', '|             |', '|             |',
            '|             |', '|             |', '|      W      |',
            '|             |', '|             |', '|             |',
            '|             |', '|             |'
        ])
        self.assertEqual(str(go), expected_board,
                         '\n' + repr(str(go)) + '\n' + repr(expected_board))

        go.play(4, 5)
        self.assertEqual(
            str(go), '\n'.join([
                '|             |', '|             |', '|             |',
                '|             |', '|      B      |', '|      W      |',
                '|             |', '|             |', '|             |',
                '|             |', '|             |'
            ]), str(go))

        with self.assertRaises(GoException):
            go.play(4, 5)
        self.assertEqual(
            str(go), '\n'.join([
                '|             |', '|             |', '|             |',
                '|             |', '|      B      |', '|      W      |',
                '|             |', '|             |', '|             |',
                '|             |', '|             |'
            ]), str(go))

        go.play(3, 5)
        expected_board = '\n'.join([
            '|             |', '|             |', '|             |',
            '|      W      |', '|      B      |', '|      W      |',
            '|             |', '|             |', '|             |',
            '|             |', '|             |'
        ])
        self.assertEqual(str(go), expected_board, str(go))

        go.play(5, 6)
        expected_board = '\n'.join([
            '|             |', '|             |', '|             |',
            '|      W      |', '|      B      |', '|      WB     |',
            '|             |', '|             |', '|             |',
            '|             |', '|             |'
        ])
        self.assertEqual(str(go), expected_board, str(go))

        go.play(4, 6)
        self.assertEqual(
            str(go), '\n'.join([
                '|             |', '|             |', '|             |',
                '|      W      |', '|      BW     |', '|      WB     |',
                '|             |', '|             |', '|             |',
                '|             |', '|             |'
            ]), str(go))

        go.play(5, 4)
        self.assertEqual(
            str(go), '\n'.join([
                '|             |', '|             |', '|             |',
                '|      W      |', '|      BW     |', '|     BWB     |',
                '|             |', '|             |', '|             |',
                '|             |', '|             |'
            ]), str(go))

        go.play(4, 4)
        self.assertEqual(
            str(go), '\n'.join([
                '|             |', '|             |', '|             |',
                '|      W      |', '|     WWW     |', '|     BWB     |',
                '|             |', '|             |', '|             |',
                '|             |', '|             |'
            ]), str(go))