自定义Gymnasium环境经Stable Baseline3训练后状态异常求助
训练后环境动作返回结果不同的原因
训练结束后环境状态未重置
Stable Baseline3的model.learn()会在训练全程持续与环境交互,调用step()推进环境状态,训练结束后环境不会自动回到初始状态,而是停留在训练最后一步的状态。此时执行env.step(2),是基于训练末尾的状态而非初始状态计算结果,自然会得到不同的观测值。自定义环境的状态管理存在疏漏
若你自定义的Gymnasium环境没有正确实现状态隔离逻辑,比如把环境状态存在类的静态属性而非实例的独立属性中,训练过程中对状态的修改会被永久保留,导致后续调用step()时使用的是被修改后的状态。TimeLimit包装器的状态残留
训练后返回的info字典新增了{'TimeLimit.truncated': False},说明环境被TimeLimit包装器包裹。训练过程中该包装器会累计环境步数,训练结束后这个计数未被重置,可能影响观测值的计算逻辑,导致结果变化。
验证方法
在训练后先执行env.reset()重置环境到初始状态,再调用env.step(2),若返回结果与训练前一致,即可确认是状态未重置导致的问题。
内容的提问来源于stack exchange,提问作者user21588592
相关产品推荐
相关产品推荐

