我已经实施了A2C。我现在想知道为什么我们要让多个参与者在环境中四处走动并收集奖励,为什么不让一个代理在环境向量中运行呢?
我个人认为这会更有效率,因为现在所有动作都可以通过一次网络一起计算。我做了一些测试,这在我的测试中似乎工作正常。我能想到使用多个参与者的一个原因是在多台机器上实现算法,在这种情况下,我们可以在一台机器上拥有一个代理。还有什么理由我们应该更喜欢多个演员?
以OpenAI的gym为基础的环境向量示例
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)]))