void update_sum_strat()

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);
        }
      }
    }
  }