昊梵体育网

强化学习代码为什么总有 reset 和 step? 第一次看强化学习代码,很容易

强化学习代码为什么总有 reset 和 step?
第一次看强化学习代码,很容易被 reset() 和 step() 绕晕。其实先把算法拿掉,只看一局游戏,结构非常朴素。

把环境想成一位桌游裁判。开局前,reset() 把棋子放回起点,并把开局时能看到的处境交给玩家。从这次 reset 开始,到抵达终点或因为别的规则结束,叫一个 episode,也就是完整的一局。

轮到玩家时,他根据当前处境选一个 action。裁判收到 action 后执行一次 step():推进棋盘,算出新位置,给出这一步的 reward,再告诉你这一局是否结束。程序把新位置保存成下一轮的“当前处境”,于是又能选择下一步动作。

所以循环里真正发生的只有五件事:开始一局、选择动作、让环境前进一步、记录结果、决定继续还是停止。step() 负责模拟世界怎样变化;它本身不会学习,也不会替 Agent 改进选择。

图里的 done 只是我们自写玩具环境中的“到达第 3 格”。它不是 Gymnasium 正式接口。现行 Gymnasium 会把结束区分为 terminated 和 truncated,并额外返回 info;这两个信号为什么必须分开,要等到讨论算法怎样估计后续回报时再讲才不会混乱。

还要特别警惕一个假象:代码里连续写三个 right,最终走到终点,只能说明这串人工动作能跑通。只有当程序根据经验改变未来的动作选择,才出现了“学习”。

先把环境循环写对,才有资格讨论算法;很多看似“模型没学会”的问题,其实从接口语义就已经错了。

强化学习 Python入门 机器学习 人工智能 RL