强化学习A2C训练LunarLander-v2代码报错,求解决方案
问题解决方案
错误原因
Gym 0.26及以上版本中,env.reset()的返回值从单一观测值,变为**(观测值, 环境信息)**的元组。你的代码直接将这个元组赋值给obs,导致model.predict(obs)无法处理非单一观测的结构,触发数组形状不匹配的错误。同时还存在两处代码适配问题:
model.predict()默认仅返回2个值(动作、状态),你用4个变量接收会导致解包错误- Gym 0.26+的
env.step()返回值新增了truncated字段,原代码的变量接收逻辑不匹配
修正后的代码
import gym from stable_baselines3 import A2C # 创建LunarLander环境 env = gym.make('LunarLander-v2', render_mode="human") # 初始化A2C模型并训练 model = A2C("MlpPolicy", env, verbose=1) model.learn(total_timesteps=1000) episodes = 10 for ep in range(episodes): # 正确提取reset返回的观测值,忽略info元组 obs, _ = env.reset() done = False while not done: # 按predict默认返回值接收变量 action, _states = model.predict(obs) # 适配Gym新版本step返回值结构 obs, rewards, terminated, truncated, info = env.step(action) # 合并终止与截断条件作为结束判断 done = terminated or truncated env.render() env.close()
关键修正点
- 将
obs = env.reset()改为obs, _ = env.reset(),仅提取观测值,丢弃环境信息元组 - 调整
model.predict()的变量接收:仅保留动作和状态两个返回值 - 更新
env.step()的变量接收逻辑,新增truncated字段,并合并terminated和truncated作为episode结束的判断条件
另外,运行时出现的np.bool8警告属于Stable Baselines3内部依赖的兼容性问题,不影响代码运行,后续库版本更新后会自动修复。
内容的提问来源于stack exchange,提问作者saravanapriyan
相关产品推荐
相关产品推荐

