[问题] 为什么 FireResetEnv 封装器的 reset 函数中 self.env.reset 不返回 obs 变量,而 EpisodicLifeEnv 和 NoopResetEnv 封装器的 reset 函数中则返回了 obs 变量

作者: RongpingZhou创建于 2026年5月15日更新于 2026年5月15日
标签question

I have encountered an issue with GravitarNoFrameskip-v4 environment, when I run the command `Python train.py --algo dqn --env GravitarNoFrameskip-v4 --seed 37 --eval-freq -1 --n-timesteps 10000000 --tensorboard-log ./runs/` on my computer, when it was running to the step 23374, when FireResetEnv reset executes `obs, _, terminated, truncated, _ = self.env.step(2)`, the environment terminated, and executes `if terminated or truncated: self.env.reset(**kwargs)`, the code will execute EpisodicLifeEnv reset() and NoopResetEnv reset(), however, **the retruned obs variable from FireResetEnv reset is still obs before reset process**, `obs, _, terminated, truncated, _ = self.env.step(2)` while I think it should be the obs after reset process. `if terminated or truncated: obs, _ = self.env.reset(**kwargs)` Here is the datalog after I add some print lines: `EpisodicLifeEnv step(): lives: 4 -> 3, terminated: True, truncated: False` `common/vec_env/dummy_vec_env.py: DummyVecEnv step_wait(): before env reset for env 0` `FireResetEnv reset() called with kwargs: {'seed': None, 'options': None}` `EpisodicLifeEnv reset() called with kwargs: {'seed': None, 'options': None}` `EpisodicLifeEnv reset() end: lives: 3` `EpisodicLifeEnv reset() end: obs shape: (210, 160, 3), obs.sum(): 3139748.00, obs.mean(): 31.148294` `FireResetEnv step() called with action 1 after, terminated: False, truncated: False` `FireResetEnv step() called with action 2 before, terminated: False, truncated: False` `********** Monitor wrapper terminated: True, episode_num: 37, episode reward: 250.0, episode length: 2358, total steps: 96075 **********` `EpisodicLifeEnv step(): lives: 3 -> 0, terminated: True, truncated: False` `FireResetEnv step() called with action 2 after, terminated: True, truncated: False` `EpisodicLifeEnv reset() called with kwargs: {'seed': None, 'options': None}` `EpisodicLifeEnv performing full reset` `NoopResetEnv`

内容来源: DLR-RM/stable-baselines3