1

在 A2C 算法中,多个环境在不同的进程中运行,以实现并行计算。在 openai 基线实现中,SubprocVecEnv是为不同环境创建不同进程的类。(您可以在stable_baselines中看到几乎相同的实现)。

我不明白的一点是:为什么进程的参数是一个返回调用环境的函数,env_fn而不是直接调用环境本身env

换句话说,为什么 L61 是这样的,而不是这样的:

self.ps = [ctx.Process(target=worker, args=(work_remote, remote, CloudpickleWrapper(env)))

谢谢!

4

1 回答 1

0

因为要创建多个环境,您需要创建它们的函数。如果您将环境本身传递给它,它是通过引用传递给环境的一个实例,并且所有工作人员都将在同一个实例上操作。

另一方面,该功能允许创建多个实例,以便每个进程都可以对一个实例进行操作。

于 2021-08-27T10:12:26.943 回答