Итак, я пытаюсь создать реализацию 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?Благодарю.