TreeStrategy get_uniform_reach_weigted_strategy()

in csrc/liars_dice/subgame_solving.cc [125:149]


TreeStrategy get_uniform_reach_weigted_strategy(
    const Game& game, const Tree& tree,
    const Pair<std::vector<double>>& initial_beliefs) {
  TreeStrategy strategy = get_uniform_strategy(game, tree);
  std::vector<std::vector<double>> reach_probabilities_buffer;
  init_nd(tree.size(), game.num_hands(), 0.0, &reach_probabilities_buffer);
  for (int traverser : {0, 1}) {
    compute_reach_probabilities(tree, strategy, initial_beliefs[traverser],
                                traverser, &reach_probabilities_buffer);
    for (size_t node = 0; node < tree.size(); ++node) {
      if (!tree[node].num_children() ||
          tree[node].state.player_id != traverser) {
        continue;
      }
      const auto [action_begin, action_end] =
          game.get_bid_range(tree[node].state);
      for (int i = 0; i < game.num_hands(); i++) {
        for (Action a = action_begin; a < action_end; ++a) {
          strategy[node][i][a] *= reach_probabilities_buffer[node][i];
        }
      }
    }
  }
  return strategy;
}