ElegantRL icon indicating copy to clipboard operation
ElegantRL copied to clipboard

可以上传一个Atari环境的demo吗

Open Timerunning opened this issue 3 years ago • 3 comments

想利用elegantRL的多进程特性训练在Atari环境上的模型,但是可能是版本更新太快的原因,在examples里找不到可以直接运行的Demo

Timerunning avatar Apr 08 '22 13:04 Timerunning

可以。

我们打算用DQN或者D3QN算法接一个 Atari Game 的打砖块环境。

这里也顺便说一下「利用elegantRL的多进程特性训练在Atari环境上的模型」要如何做:

先提供一个能跑Atari Game 的测试代码:

env = gym.make('某个Atari Game的名字')

state  = env.reset()
done = True
while done:
    state, reward, done, _ = env.step(action)

因为多进程需要获取 env的创建方法,所以我们需要把创建env 的过程拆开,作为参数记录在主进程里。 主进程重建多个子进程后,在worker子进程里,它会自行创建 用于训练的仿真环境:

env_func = gym.make
env_args = {一个记录超参数的字典}

env = env_func{**env_args)

此外,基于当前DQN或D3QN代码 接一个 Atari Game 的游戏,需要注意,它的state 可能是游戏画面截图,目前的 demo 都是基于 1D state 写的,需要改成 2D state。 好在 ReplayBuffer把 state 和其他数据分开储存了,所以可以直接储存 不同 shape 的 state,直接完成代码适配。

Yonv1943 avatar Apr 10 '22 03:04 Yonv1943

感谢您的回复。由于刚接触到ElegantRL框架,我可能还需要一段时间结合其他环境的Demo来理解您的回复。

Timerunning avatar Apr 11 '22 12:04 Timerunning

另外其他的框架会提供一个专门的方法对Atari环境输出的帧画面进行处理,例如原始的游戏画面为RGB三通道图片,具体尺寸为(210, 160, 3)。对原始图像进行灰度图,空间尺寸缩放,最大最小值归一化,堆叠相邻N个游戏帧(N=4)。最后得到一个尺寸为(4, 84, 84),即为相邻的4帧灰度图。本项目有考虑过提供类似的包装方法吗。

Timerunning avatar Apr 11 '22 12:04 Timerunning