ElegantRL
ElegantRL copied to clipboard
AgentPPO中的explore_one_env
请教下AgentPPO中的explore_one_env中的splice list 的作用是什么
` def explore_one_env(self, env, target_step): traj_temp = list()
state = self.states[0]
last_done = 0
for i in range(target_step):
action, noise = [ary[0] for ary in self.select_actions((state,))]
next_state, reward, done, _ = env.step(np.tanh(action))
traj_temp.append((state, reward, done, action, noise))
if done:
state = env.reset()
last_done = i
else:
state = next_state
self.states[0] = state
'''splice list'''
traj_list = self.traj_list[0] + traj_temp[:last_done + 1]
self.traj_list[0] = traj_temp[last_done:]
return traj_list`
在PPO中,为了计算一个value值 给PPO去拟合,它要求我们提供一条完整的 轨迹(trajectory)
sar-sar-...-sar-SAR (为了方便描述,我们将在最后一步 done=True 时的SAR标记为大写)
splice list 的作用就是,当我们收集到的轨迹不完整时,它会截取一段完整的轨迹给PPO接下来的训练,即:
sar-sar-...-sar-SAR-sar-...-sar-SAR-sar-sar
被截取为
sar-sar-...-sar-SAR-sar-...-sar-SAR, 且被截取下来的 sar-sar 将被暂时缓存起来,等待下一轮完整时再进行计算。
有超参数 if_use_old_trajectory 可以控制是否在下一轮 使用 上一轮被截取下来的旧轨迹片段。