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 是一种轻量级的向量化环境,适用于顺序执行多个环境实例的场景,尤其在调试或环境计算量较小时非常有用。