in csrc/liars_dice/subgame_solving.cc [390:419]
void update_sum_strat(int public_node, int traverser,
const TreeStrategy& br_strategies,
const std::vector<double>& traverser_beliefs) {
const auto& node = tree[public_node];
const auto& state = node.state;
if (node.num_children()) {
if (state.player_id == traverser) {
std::vector<double> new_beliefs(game.num_hands());
for (auto [child_node, a] : ChildrenActionIt(node, game)) {
for (int i = 0; i < game.num_hands(); i++) {
sum_strategies[public_node][i][a] +=
traverser_beliefs[i] * br_strategies[public_node][i][a];
last_strategies[public_node][i][a] =
traverser_beliefs[i] * br_strategies[public_node][i][a];
}
for (int i = 0; i < game.num_hands(); i++) {
new_beliefs[i] =
traverser_beliefs[i] * br_strategies[public_node][i][a];
}
update_sum_strat(child_node, traverser, br_strategies, new_beliefs);
}
} else {
assert(state.player_id == 1 - traverser);
for (auto child_node : ChildrenIt(node)) {
update_sum_strat(child_node, traverser, br_strategies,
traverser_beliefs);
}
}
}
}