make_env = lambda: ptan.common.wrappers.wrap_dqn(gym.make("PongNoFrameskip-v4"))
envs = [make_env() for _ in range(NUM_ENVS)]
这是您可以查看的代码。
以上两行代码使用A2C算法为Atari Pong游戏创建了多个环境。
我理解为什么让多个代理在 A3C 中呈现的相同环境的不同实例上工作非常有用(即 A2C 的异步版本)。但是,在上面的代码中,它有一个代理在同一环境的不同实例上工作。
将多个环境与单个代理一起使用有什么优势?
更新
class GymEnvVec:
def __init__(self, name, n_envs, seed):
self.envs = [gym.make(name) for i in range(n_envs)]
[env.seed(seed + 10 * i) for i, env in enumerate(self.envs)]
def reset(self):
return [env.reset() for env in self.envs]
def step(self, actions):
return list(zip(*[env.step(a) for env, a in zip(self.envs, actions)]))