in cpp/thread_loop.h [42:88]
void mainLoop() final {
rela::TensorDict obs = {};
torch::Tensor r;
torch::Tensor t;
while (!terminated()) {
obs = vecEnv_->reset(obs);
while (!vecEnv_->anyTerminated()) {
if (terminated()) {
break;
}
if (paused()) {
waitUntilResume();
}
rela::TensorDict reply;
if (actors_.size() == 1) {
reply = actors_[0]->act(obs);
} else {
std::vector<rela::TensorDict> replyVec;
for (int i = 0; i < (int)actors_.size(); ++i) {
auto input = rela::tensor_dict::narrow(obs, 1, i, 1, true);
// if (!logFile_.empty()) {
// logState(*file, input);
// }
auto rep = actors_[i]->act(input);
replyVec.push_back(rep);
}
reply = rela::tensor_dict::stack(replyVec, 1);
}
std::tie(obs, r, t) = vecEnv_->step(reply);
if (eval_) {
continue;
}
for (int i = 0; i < (int)actors_.size(); ++i) {
actors_[i]->postAct(r, t);
}
}
// eval only runs for one game
if (eval_) {
break;
}
}
}