基于DQN强化学习的超级马里奥训练无学习效果问题求助
问题排查与优化方案
- 优先修复奖励计算的致命bug
提供的BasicWrapper的step方法中,计算reward = vx + vy + c + d时,vy变量没有任何定义和赋值,属于未初始化的无效变量,直接导致奖励计算完全不符合预期,模型无法得到正确的反馈信号,是训练失效的核心原因。 - 补充时序信息输入
当前配置使用window_length=1仅输入单帧观测,而马里奥的跳跃、移动都是时序相关的动作,单帧观测无法判断自身运动速度、跳跃升降状态,模型无法做出需要时序判断的决策(比如判断起跳时机)。建议将窗口长度调整为3~4,堆叠连续多帧的观测作为输入。 - 优化观测空间设计
当前观测仅裁剪马里奥周围7列的tile范围,很容易无法覆盖前方的坑、敌人等障碍信息,建议适当加宽裁剪范围到10~12列,保证模型能观测到足够的前置路径信息。 - 调整DQN模型与训练配置
- 输入的tile是网格类的空间结构,当前全连接网络对空间特征的提取效率极低,建议先加入1~2层轻量卷积层提取空间特征,再接入全连接层输出Q值
- 10万步的warmup步长过长,大量无意义的随机探索会浪费训练资源,建议调整为1万~5万步
- 默认的
EpsGreedyQPolicyepsilon值固定,需要配置动态衰减逻辑:初始epsilon设为1.0,随着训练步数逐步衰减到0.01~0.05,平衡前期探索和后期利用
- 修正Wrapper逻辑问题
- 当前卡住重置的判断阈值过严,很容易打断正常的探索过程,建议放宽判断条件,比如设置连续200步没有前进才触发重置,同时重置时要正确处理返回的状态、奖励等参数,避免经验池中出现无效的转换数据
- 游戏内计时器是倒计时机制,直接使用
timer - t_old作为时间奖励会导致每一步都获得负反馈,且负反馈的数值随倒计时波动,建议改为固定每步扣0.1的小惩罚,同时调高向右移动的奖励权重,保证前进的收益远大于时间惩罚 - 单帧输入的跳跃指令很容易因为按下时间过短导致跳跃高度不足,建议给跳跃动作增加帧保持逻辑:触发跳跃动作时,连续3~4帧都输入跳跃指令,保证马里奥能跳到足够高度
- 验证动作空间有效性
可以手动测试action_list对应的四个动作是否符合预期,确认右跳动作能正常触发足够高度的跳跃,避免动作映射错误导致无法跳过障碍。
内容的提问来源于stack exchange,提问作者pm233
相关产品推荐
相关产品推荐

