You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

强化学习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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:14:53