Redian新闻
>
第10篇:强化学习Q-learning求解迷宫问题 代码实现

第10篇:强化学习Q-learning求解迷宫问题 代码实现

科技

你好,我是郭震(zhenguo)

今天重新发布强化学习第10篇:强化学习Q-learning求解迷宫问题 代码实现

我想对此篇做一些更加详细的解释。

1 创建地图

创建迷宫地图,包括墙网格,走到墙网格就是负奖励。

注意:空白可行走网格奖励值设置为负数,比如-1, 是为减少路径中所经点数;如果设置为大于0的奖励值,路线中会出现冗余点。

import numpy as np

# 创建迷宫地图
exit_coord = (3, 3)
row_n, col_n = 4, 4

maze = np.zeros((row_n, col_n)) - 1

# 走出迷宫奖励10个积分
maze[exit_coord] = 10

# 走到墙网格,扣除10个积分
maze[(0, 3)] = -10
maze[(1, 0)] = -10
maze[(1, 2)] = -10
maze[(2, 2)] = -10
maze[(3, 0)] = -10

2 定义动作

定义动作集合

# 定义动作集合
action_n = 4
actions = [0, 1, 2, 3]  # 上、下、左、右

3 算法参数

定义参数

# 定义参数
alpha = 0.1  # 学习率
gamma = 0.9  # 折扣因子
epsilon = 0.1  # ε-greedy策略的ε值

4 初始化Q表

初始化Q表,三维数组。

# 初始化Q表
Q = np.zeros((row_n, col_n, action_n))

5 算法迭代

进行Q-learning算法迭代更新,包括步骤:

  • 选择动作
  • 执行动作,更新状态
  • 更新Q值

算法实现中一些细节处理包括:

  1. 智能体走到边界时,排除一些action
  2. 每次episode后,根据路线所经点的reward求和,判断是否找到更优路线。
# 进行Q-learning算法迭代更新
begin_cord = (0, 0)
max_reward_route = float("-inf")
for episode in range(200):
    # 初始化起始位置
    state = begin_cord
    route = [state]
    while state != exit_coord:  # 终止条件:到达终点位置
        tmp = actions.copy()
        # 排除一些可能
        if state[0] == 0:  # 不能向上
            tmp.remove(0)
        if state[1] == 0:  # 不能向左
            tmp.remove(2)
        if state[0] == row_n - 1:  # 不能向下
            tmp.remove(1)
        if state[1] == col_n - 1:  # 不能向右
            tmp.remove(3)

        # 选择动作
        if np.random.uniform() < epsilon:
            action = np.random.choice(tmp)  # ε-greedy策略,以一定概率随机选择动作
        else:
            action = np.argmax(Q[state[0], state[1], tmp])  # 选择Q值最大的动作
            action = tmp[action]

        # 执行动作,更新状态
        next_state = state
        if action == 0:  # 上
            next_state = (state[0] - 1, state[1])
        elif action == 1:  # 下
            next_state = (state[0] + 1, state[1])
        elif action == 2:  # 左
            next_state = (state[0], state[1] - 1)
        elif action == 3:  # 右
            next_state = (state[0], state[1] + 1)

        # 获取即时奖励
        reward = maze[next_state]

        # 更新Q值
        Q[state][action] = (1 - alpha) * Q[state][action] + alpha * (reward + gamma * np.max(Q[next_state]))

        # 更新状态
        state = next_state
        route.append(state)

    route_reward = sum(maze[state] for state in route)
    if max_reward_route < route_reward:
        max_reward_route = route_reward
        best_route = route.copy()
        print(f"episode: {episode}, 新发现最优路线:{best_route}")

    route.clear()
    cur_reward_route = 0

迭代完成,得到最佳路线,就如上图所示环境,最佳路线如下所示。大概在第50-80迭代步便可搜索到:

[(0, 0), (0, 1), (1, 1), (2, 1), (3, 1), (3, 2), (3, 3)]

Q表如下所示,可以看到红框所示为下面粉丝网格的Q值,第三个元素就是向左的奖励值,看到是最低的,因为是墙体。

根据此Q表,我们可预测出从任意位置出发的最佳路线,大家自行尝试。

最后分析训练时步与路线奖励值关系图,看到逐渐收敛。

以上,Q-learning算法求迷宫问题,代码实现。

感谢你的点赞和转发,让我更新更有动

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
哥本哈根浮光掠影复习强化学习过往四篇宝岛这出戏唱走了板第六篇:强化学习策略迭代 通俗解释领域驱动设计DDD|从入门到代码实践𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶内衣裤,软弹有度,上身0束缚~耗时两年,谷歌用强化学习打造23个机器人帮助垃圾分类蛋白设计新时代!Science: 开发出基于强化学习的蛋白结构设计方法强化学习的应用领域和案例博士申请 | 亚利桑那州立大学魏华老师招收强化学习全奖博士/硕士/本科/实习生BB鸭 | 微信规范涉灾情信息内容;马斯克官宣直播约架;推特再次强抢用户账号;安卓扫描二维码实现远距离自动放大强化学习驱动的低延迟视频传输WWW 2023|快手:通过强化学习提升用户留存ICML 2023 | 清华团队提出使用低维优化求解器求解高维/大规模优化问题Gzip+ kNN文本分类竟然击败Transformers:无需预训练、14行代码实现第二篇:强化学习中的7个基础概念第五篇:强化学习基础之马尔科夫决策过程Agustín Hernández:中美洲建筑背景下的未来主义巨构自述海外洋人华人做爱彼迎(Airbnb)民宿的酸甜苦辣和奇葩经历:简直上了一堂文化人类学大课第十二篇:强化学习SARSA算法学了一口娘娘腔【𝐂𝐚𝐥𝐧𝐢𝐊𝐞𝐚𝐧双皮奶无痕内裤】49元三条!巨巨巨好穿 !!简直就是辣妹顶配,食品级冰箱收纳盒【一日团】秋招资讯 | 24NG求职自测表!用ChatGPT和强化学习玩转《我的世界》,Plan4MC攻克24个复杂任务ICLR 2023|节省95%训练开销,清华黄隆波团队提出强化学习专用稀疏训练框架Dr Sun 2023 暑假基础物理化学 AP 物理化学 奥林匹克化学第四范式开源强化学习研究通用框架,支持单智能体、多智能体训练,还可训练自然语言任务!训练速度提升17%第三篇:强化学习发展历史ICLR 2023 | 如何融合进化算法与强化学习打破性能瓶颈?第八篇:强化学习值迭代及代码实现AI设计蛋白质新方法登Science!利用强化学习,直接根据预想优化结构我将开始更新 强化学习Qlib全新升级:强化学习能否重塑金融决策模式?樱花季OpenAI联创Karpathy爱上羊驼:纯C代码实现婴儿Llama2,MacBook可运行,已揽1.6k星
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。