Open Timerunning opened 2 years ago
可以。
我们打算用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,直接完成代码适配。
感谢您的回复。由于刚接触到ElegantRL框架,我可能还需要一段时间结合其他环境的Demo来理解您的回复。
另外其他的框架会提供一个专门的方法对Atari环境输出的帧画面进行处理,例如原始的游戏画面为RGB三通道图片,具体尺寸为(210, 160, 3)。对原始图像进行灰度图,空间尺寸缩放,最大最小值归一化,堆叠相邻N个游戏帧(N=4)。最后得到一个尺寸为(4, 84, 84),即为相邻的4帧灰度图。本项目有考虑过提供类似的包装方法吗。
想利用elegantRL的多进程特性训练在Atari环境上的模型,但是可能是版本更新太快的原因,在examples里找不到可以直接运行的Demo