Понимание поиска дерева Монте-Карло - PullRequest
1 голос
/ 26 сентября 2019

Итак, я пытаюсь создать реализацию AlphaZero, используя керасы.Тем не менее, я не слишком уверен в MCTS.Мое понимание и кодирование поиска по дереву Монте-Карло выглядит следующим образом:


class MCTS(object):
    def __init__(self, action_size, movesets, nsims, ndepth):
        self.nsims = nsims
        self.ndepth = ndepth
        self.movesets = movesets
        self.action_size = action_size

    def evaluate_and_act(self, agent, stateizer, critic, state):
        sims = []

        print("Beginning monte carlo tree search")

        true_state = state
        for i in range(self.nsims):
            random_walk = []
            for j in range(self.ndepth):
                random_actions = []
                print("Searching depth", j, "of simulation", i)

                for k in range(self.movesets):
                    rand_move = np.random.choice(self.action_size)
                    rand_move_matrix = cp.add(cp.zeros((1, self.action_size)), .0001)
                    rand_move_matrix[0][rand_move] = critic.predict(state, batch_size=64)[0][0]
                    random_actions.append(cp.asnumpy(rand_move_matrix))
                random_action_concat = np.concatenate(random_actions, -1)
                state = stateizer.predict(cp.asnumpy(random_action_concat), batch_size=64)
                random_walk.append(random_actions)
            sims.append(random_walk)
            state = true_state

        best_reward = -1000000.0
        for walk in sims:

            sum_reward = np.sum(walk)
            if sum_reward >= best_reward:
                best_walk = walk
                best_reward = sum_reward

        return best_walk[0]

Похоже, мне не нужна сеть политик в этой реализации, только критик.Может кто-нибудь, пожалуйста, помогите мне понять, правильна ли моя реализация, и почему она неверна с точки зрения AlphaZero?Благодарю.

...