def branches(leaf: Node): """ leaf の分岐数 """ cnt = 0 for i, anc in enumerate(leaf.iter_path_reverse()): if anc.height != i: cnt += 1 return cnt
def update_tree(game_lst,game_tree): root_name = game_lst[0][0][0] for branch, result in zip([x for x,_ in game_lst],[x[1] for x in game_lst]): parent_node = game_tree assert branch[0] == parent_node.name for cur_node_name in branch[1:]: cur_node = next( (node for node in parent_node.children if node.name == cur_node_name), None, ) if cur_node is None: cur_node = Node(cur_node_name, parent=parent_node,nb_visit=0,nb_win=0) parent_node = cur_node #backpropagation for i in list(cur_node.iter_path_reverse()): i.nb_win=i.nb_win+result i.nb_visit=i.nb_visit+1 return game_tree