DummyVecEnv是一种简单的向量化环境(Vectorized Environment),它通过顺序执行而非并行执行来管理多个环境实例。尽管它不利用多进程或多线程的并行能力,但它仍然提供了与高级向量化环境(如 SubprocVecEnv)相同的接口,方便在不需要并行化时使用。
1、DummyVecEnv环境的主要特点
- 顺序执行。Dummy Vec Env 依次处理每个环境,而不是并行运行。适用于调试或环境本身计算量较小的场景。
- 接口一致。提供与其他向量化环境(如 SubprocVecEnv)相同的 API,便于切换。
- 轻量级。不需要额外的进程或线程,资源开销较低。
2、DummyVecEnv环境的使用场景
- 调试:由于顺序执行,更容易调试代码。
- 简单环境:适用于环境本身计算量小、不需要并行加速的情况。
- 兼容性:在代码中保持与其他向量化环境的一致性。
3、DummyVecEnv环境的示例代码
from gym.envs.classic_control import CartPoleEnv
from gym.vector import DummyVecEnv
# 创建多个 CartPole 环境实例
env_fns = [lambda: CartPoleEnv() for _ in range(4)]
# 使用 DummyVecEnv 封装
dummy_vec_env = DummyVecEnv(env_fns)
# 重置环境
obs = dummy_vec_env.reset()
# 执行一个动作
actions = [dummy_vec_env.action_space.sample() for _ in range(4)]
obs, rewards, dones, info = dummy_vec_env.step(actions)
print(obs)
4、DummyVecEnv环境对比其他 VecEnv
- SubprocVecEnv:利用多进程并行运行环境,适合计算密集型任务。
- DummyVecEnv:顺序执行,适合轻量级任务或调试。
5、总结
DummyVecEnv 是一种轻量级的向量化环境,适用于顺序执行多个环境实例的场景,尤其在调试或环境计算量较小时非常有用。