ElegantRL icon indicating copy to clipboard operation
ElegantRL copied to clipboard

AgentPPO中的explore_one_env

Open TIANRENK opened this issue 2 years ago • 1 comments

请教下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` 

TIANRENK avatar Oct 12 '21 00:10 TIANRENK

在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 可以控制是否在下一轮 使用 上一轮被截取下来的旧轨迹片段。

Yonv1943 avatar Mar 26 '22 12:03 Yonv1943