void mainLoop()

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