返回介绍

Q-learning 算法更新

发布于 2025-05-02 13:36:20 字数 3430 浏览 0 评论 0 收藏 0

作者: Morvan 编辑: Morvan

上次我们知道了 RL 之中的 Q-learning 方法是在做什么事,今天我们就来说说一个更具体的例子. 让探索者学会走迷宫. 黄色的是天堂 (reward 1), 黑色的地狱 (reward -1). 大多数 RL 是由 reward 导向的,所以定义 reward 是 RL 中比较重要的一点。

本节内容包括:

算法

整个算法就是一直不断更新 Q table 里的值,然后再根据新的值来判断要在某个 state 采取怎样的 action. Qlearning 是一个 off-policy 的算法,因为里面的 max action 让 Q table 的更新可以不基于正在经历的经验(可以是现在学习着很久以前的经验,甚至是学习他人的经验). 不过这一次的例子,我们没有运用到 off-policy, 而是把 Qlearning 用在了 on-policy 上,也就是现学现卖,将现在经历的直接当场学习并运用. On-policy 和 off-policy 的差别我们会在之后的 Deep Q network (off-policy) 学习中见识到. 而之后的教程也会讲到一个 on-policy (Sarsa) 的形式,我们之后再对比。

算法的代码形式

首先我们先 import 两个模块, maze_env 是我们的环境模块,已经编写好了,大家可以直接在 这里下载 , maze_env 模块我们可以不深入研究,如果你对编辑环境感兴趣,可以去看看如何使用 python 自带的简单 GUI 模块 tkinter 来编写虚拟环境. 我也有 对应的教程 . maze_env 就是用 tkinter 编写的. 而 RL_brain 这个模块是 RL 的大脑部分,我们下节会讲。

from maze_env import Maze
from RL_brain import QLearningTable

下面的代码,我们可以根据上面的图片中的算法对应起来,这就是整个 Qlearning 最重要的迭代更新部分啦。

def update():
    # 学习 100 回合
    for episode in range(100):
        # 初始化 state 的观测值
        observation = env.reset()

        while True:
            # 更新可视化环境
            env.render()

            # RL 大脑根据 state 的观测值挑选 action
            action = RL.choose_action(str(observation))

            # 探索者在环境中实施这个 action, 并得到环境返回的下一个 state 观测值, reward 和 done (是否是掉下地狱或者升上天堂)
            observation_, reward, done = env.step(action)

            # RL 从这个序列 (state, action, reward, state_) 中学习
            RL.learn(str(observation), action, reward, str(observation_))

            # 将下一个 state 的值传到下一次循环
            observation = observation_

            # 如果掉下地狱或者升上天堂,这回合就结束了
            if done:
                break

    # 结束游戏并关闭窗口
    print('game over')
    env.destroy()

if __name__ == "__main__":
    # 定义环境 env 和 RL 方式
    env = Maze()
    RL = QLearningTable(actions=list(range(env.n_actions)))

    # 开始可视化环境 env
    env.after(100, update)
    env.mainloop()

如果想一次性看到全部代码,请去我的 Github

如果你觉得这篇文章或视频对你的学习很有帮助,请你也分享它,让它能再次帮助到更多的需要学习的人。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。