in simple_game/cfr_opt.h [259:289]
void buildTree(InfoSets &infos, const rela::Env &g) {
// std::cout << "State: " << g.info() << std::endl;
auto spec = g.spec();
int numPlayer = spec.players.size();
if (g.terminated()) {
u_.resize(numPlayer, 0.0f);
for (int i = 0; i < numPlayer; ++i) {
u_[i] = g.playerReward(i);
}
return;
}
legalActions_ = g.legalActions();
int numAction = (int)legalActions_.size();
info_ = infos.getInfoSet(g);
children_.resize(numAction);
u_.resize(numPlayer);
// Preallocate memory;
regret_.resize(numAction);
nextReachPr_.resize(numPlayer);
for (int i = 0; i < numAction; ++i) {
std::unique_ptr<rela::Env> g_next = g.clone();
assert(g_next != nullptr);
g_next->step(legalActions_[i].first);
children_[i].buildTree(infos, *g_next);
}
}