如何在Atari环境中堆叠框架以进行Deep Q学习?

时间:2019-08-13 15:27:42

标签: deep-learning reinforcement-learning openai-gym stack-frame atari-2600

我定义了一种执行以下操作的方法:

  1. 接收帧(我希望将其堆叠)和buffer_size(我希望堆叠的帧数。)
  2. 如果没有(在游戏开始时)stacked_frames,它将为给定的buffer_size堆叠相同的帧。
  3. 否则,它仅删除最旧的框架并附加一个新框架,该框架作为该方法的输入。

问题在于,即使我已经输入了stacked_frames和新帧,因此它始终认为stacked_frame为空,因此进入了第一个条件(如果stacked_frames为None :)。

我已经尝试过下面的代码,任何人都可以在其中提出任何修改建议。

def stack_frames(堆栈帧,帧,缓冲区大小):

if stacked_frames is None:
    stacked_frames = np.zeros((buffer_size, *frame.shape))
    for idx, _ in enumerate(stacked_frames):
        stacked_frames[idx, :] = frame
else:
    stacked_frames[0:buffer_size-1, :] = stacked_frames[1:, :]
    stacked_frames[buffer_size-1, :] = frame

stacked_frames = stacked_frames.reshape(1, *frame.shape[0:2], 
                                        buffer_size)
return stacked_frames

正如我说过的,我希望它接受上一个堆叠的框架,如果已经存在堆叠的框架,则添加新框架,而当它没有任何先前的堆叠框架时,它应该进入第一个循环。

0 个答案:

没有答案