@startuml serial_actor
start
#orange:serial_controller init, set env_manager and collect_mode policy;
#pink:env reset;
repeat
  #orange:policy data_preprocess;
  #orange:policy forward_with_obs;
  #orange:policy data_postprocess;
  #pink:env step_with_action;
  #orange:policy process_transition;
  :actor save_transition_temporally_in_cache;
  if (for every env: \n env i is done? OR \n cache length is not smaller than traj_len?) then (yes)
    #orange:policy get_train_sample_from_cache;
    :actor save_traj_for_return;
    if (env i is done?) then (yes)
      #pink:env reset_i;
      #orange:policy collect_mode_reset;
      :actor log_episode_result;
    endif
  endif
repeat while (generated traj data is not enough?)
:actor log_statistics_data;
:actor return collect_data and collect_info;
stop
@enduml
