强化学习之Q-learning算法

前言:
在正文开始之前,首先给大家介绍一个不错的人工智能学习教程:https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程,感兴趣的读者可以自行查阅。


一、算法介绍

Q-Learning是一种基于值函数的强化学习算法,其目标是学习一个最优的行动价值函数(Q函数),从而指导智能体在不同状态下选择最优行动。Q-Learning属于离线策略学习方法,不依赖于策略的形式,因此具有较强的灵活性和普适性。

Q-Learning的基本概念:

  • 状态(State, s s s:环境在某一时刻的具体情况。
  • 动作(Action, a a a:智能体在某一状态下可以采取的行为。
  • 奖励(Reward, r r r:智能体执行动作后环境给予的反馈。
  • 策略(Policy, π \pi π:智能体选择动作的规则。
  • Q函数( Q ( s , a ) Q(s,a) Q(s,a):在状态 s s s下采取动作 a a a所能获得的预期累积奖励。

Q-Learning通过不断更新Q函数,逐步逼近最优Q函数,从而找到最优策略。

二、算法原理

Q-Learning的核心在于更新Q函数,具体更新公式如下:

Q ( s t , a t ) ← Q ( s t , a t ) + α [ r t + 1 + γ max ⁡ a Q ( s t + 1 , a ) − Q ( s t , a t ) ] Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha \left[ r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a) - Q(s_t, a_t) \right] Q(st,at)Q(st,at)+α[rt+1+γamaxQ(st+1,a)Q(st,at)]

其中:

  • s t s_t st:当前状态
  • a t a_t at:当前动作
  • r t + 1 r_{t+1} rt+1:执行动作后获得的奖励
  • s t + 1 s_{t+1} st+1:下一个状态
  • α \alpha α:学习率,控制新信息对Q值的影响程度
  • γ \gamma γ:折扣因子,衡量未来奖励的重要性
算法步骤:
  1. 初始化:为所有状态-动作对 ( s , a ) (s,a) (s,a)初始化Q值,通常设为0。
  2. 循环
    • 在当前状态 s s s下,选择一个动作 a a a,通常采用 ϵ \epsilon ϵ-贪婪策略,以平衡探索与利用。
    • 执行动作 a a a,观察奖励 r r r和下一个状态 s ′ s' s
    • 更新Q值:
      Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a) + \alpha \left[ r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right] Q(s,a)Q(s,a)+α[r+γamaxQ(s,a)Q(s,a)]
    • 将状态 s ′ s' s设为新的当前状态 s s s
  3. 终止:当达到终止条件(如达到最大迭代次数或收敛)时,算法结束。

三、案例分析:冰湖环境中的Q-Learning

3.1 环境描述

冰湖(Ice Lake)是一种模拟滑冰场景的强化学习环境,智能体需要在冰面上滑行,避开障碍物,最终到达目标位置。为了简化,本案例将冰湖环境抽象为一个二维网格,智能体需要通过选择合适的方向,将自身移动到目标位置。

3.2 环境设置

  • 网格大小 5 × 5 5 \times 5 5×5
  • 起始位置 ( 0 , 0 ) (0, 0) (0,0)
  • 目标位置 ( 4 , 4 ) (4, 4) (4,4)
  • 障碍物:固定分布在网格中,智能体无法通过
  • 动作空间:四个方向(上、下、左、右)
  • 奖励机制
    • 到达目标: + 10 +10 +10
    • 每步移动: − 1 -1 1
    • 碰到障碍物: − 10 -10 10,并保持在原位置

3.3 部分代码

以下是使用Python实现的Q-Learning算法在冰湖环境中的部分代码。

# 主函数
if __name__ == "__main__":np.random.seed(0)random.seed(0)# 环境参数grid_size = 5env = IceLakeEnv(grid_size=grid_size)# Q-Learning参数epsilon = 0.5alpha = 0.1gamma = 0.9ncol = grid_sizenrow = grid_sizeagent = QLearning(ncol, nrow, epsilon, alpha, gamma)num_episodes = 100  # 训练回合数return_list = []  # 记录每一回合的回报# 训练过程for episode in tqdm(range(num_episodes), desc='Training Progress'):episode_return = 0state_tuple = env.reset()# 将状态元组转换为单一整数state = state_tuple[0] * grid_size + state_tuple[1]done = Falsewhile not done:action = agent.take_action(state)next_state_tuple, reward, done = env.step(action)next_state = next_state_tuple[0] * grid_size + next_state_tuple[1]agent.update(state, action, reward, next_state)episode_return += reward  # 累积回报state = next_statereturn_list.append(episode_return)# 绘制奖励函数曲线episodes_list = list(range(1, num_episodes + 1))plt.figure(figsize=(10, 6))plt.plot(episodes_list, return_list, marker='o')plt.xlabel('回合数 (Episodes)')plt.ylabel('累积奖励 (Returns)')plt.title('Q-Learning在冰湖环境中的奖励变化曲线')plt.grid(True)plt.show()# 打印最终的Q表和策略print("Q-learning算法最终收敛得到的策略为:")action_meaning = ['^', 'v', '<', '>']print_agent(agent, env, action_meaning)# 测试智能体并记录路径def test_agent(env, agent):state_tuple = env.reset()state = state_tuple[0] * env.grid_size + state_tuple[1]path = [state_tuple]done = Falsetotal_reward = 0while not done:action = np.argmax(agent.Q_table[state])next_state_tuple, reward, done = env.step(action)path.append(next_state_tuple)total_reward += rewardstate = next_state_tuple[0] * env.grid_size + next_state_tuple[1]return path, total_rewardpath, total_reward = test_agent(env, agent)print("路径:", path)print("总奖励:", total_reward)# 可视化环境布局和路径、策略print("环境布局及路径可视化:")env.render(path=path, policy=agent.Q_table)

3.4 运行结果

训练完成后,智能体应能逐步学习到从起始点到目标点的最优路径,并最大化累积奖励。输出结果如下:

Q-learning算法最终收敛得到的策略为:
> > v v v
v X > > v
v v X > v
> > v X v
> > > > G路径: [(0, 0), (0, 1), (0, 2), (1, 2), (1, 3), (1, 4), (2, 4), (3, 4), (4, 4)]
总奖励: 3

奖励函数曲线如下:


图中展示了Q-Learning算法在100个回合中的累积奖励变化。随着训练的进行,累积奖励逐渐增加,表明智能体的策略在不断优化,能够更快、更有效地到达目标位置,同时避开障碍物。

可视化最优路径如下:


其中,S表示起点,G表示终点,X表示障碍物。

3.5 注意事项

  • 障碍物位置:在本案例中,障碍物位置是固定的,以确保环境的稳定性,便于智能体学习最优策略。如果障碍物位置在每个回合中随机生成,可能会增加学习的难度,尤其是在回合数较少的情况下。

  • 探索与利用的平衡 ϵ \epsilon ϵ-贪婪策略中的 ϵ \epsilon ϵ值决定了智能体在探索新动作与利用已学知识之间的平衡。较高的 ϵ \epsilon ϵ促进探索,但可能导致收敛速度变慢;较低的 ϵ \epsilon ϵ则更倾向于利用,可能陷入局部最优。

  • 学习率与折扣因子:学习率 α \alpha α决定了新信息对Q值的影响程度;折扣因子 γ \gamma γ衡量了未来奖励的重要性。两者的选择对算法的收敛性和最终策略有重要影响。

四、总结

Q-Learning作为一种经典的强化学习算法,通过学习状态-动作价值函数,实现了在各种环境中的策略优化。在冰湖环境的案例中,Q-Learning成功指导智能体找到最优路径,展示了其在策略决策中的有效性。通过引入障碍物和不同的奖励机制,进一步丰富了环境的复杂性,使算法在更具挑战性的情境中依然能够表现出色。

未来,可以进一步探索Q-Learning在更复杂环境中的应用,如多智能体协作、连续动作空间或动态环境变化等。此外,结合深度学习的方法(如深度Q网络,DQN)能够处理更大规模和高维度的问题,拓展Q-Learning的应用范围。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447567.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

山西农业大学20241015

02-VUE 一. Vue中常用的指令1. Vue指令概述2 Vue中指令的分类3 Vue中指令3.1 内容渲染指令3.2 条件渲染指令3.2.1 v-show3.2.2 v-if3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 v-on--重要3.3.1 内联语句3.3.2 methods中的函数名 一. Vue中常用的指令 1. Vue指令概述 概念: 指…

STL --- list(C++)

本期鸡汤&#xff1a; “星光不负赶路人&#xff0c;时光不负有心人&#xff1b;你只管努力&#xff0c;剩下的交给时间。” 目录 1.list的介绍即使用 1.1list介绍 1.2list使用 1.2.1list构造 1.2.2list的iterator的使用 1.2.3list capacity 1.2.4list element access 1…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型&#xff08;LLM&#xff09;已经接近人类水平&#xff0c;但视觉理解在世界范围似乎尚未突破&#xff0c;那么为何不能直接将LLM技术用于视觉&#xff1f;让AI看视频的难点在哪&#xff1f;如果语言是AGI必要的能力&#xff0c;为…

【Java 22 | 6】 深入解析Java 22 :记录(Records)增强详解

Java 22 对记录&#xff08;Records&#xff09;进行了重要的增强&#xff0c;进一步提升了这一特性在数据建模和类型安全方面的灵活性。以下是对记录类的详细介绍&#xff0c;包括基础概念、增强特性、使用场景、实际项目中的应用示例&#xff0c;以及示例代码。 1. 基础介绍…

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

快速理解http的get和post

在网络通信中&#xff0c;HTTP 协议扮演着非常重要的角色&#xff0c;而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…

【JVM】内存分析工具JConsole/Visual VM

1 缘起 日常补充JVM调优&#xff0c;调优实践前需要学习一些理论做支撑&#xff0c; JVM调优三步&#xff1a;理论>GC分析>JVM调优&#xff0c; 我们会有一些玩笑话说&#xff0c;做了这么久Java开发&#xff0c;做过JVM调优吗&#xff1f; 做过&#xff0c;面试时。当然…

java中连接Mysql以及PreparedStatement如何防止sql注入

目录 JDBC 使用JDBC连接到MySQL 使用 Statement 使用 PreparedStatement Statement 和 PreparedStatement 区别 在 java 中如何连接到 MySQL 数据库&#xff0c;执行 SQL 查询&#xff0c;并处理查询结果&#xff1f; JDBC java 程序连接到 mysql&#xff0c;首先需要下…

2024年看项目管理软件与工程项目管理的奇妙融合

一、禅道在项目管理中的全面应用 禅道在产品管理方面&#xff0c;能够清晰地对产品的需求进行全方位管理。从需求的提出到详细信息的记录&#xff0c;再到状态、负责人以及完成进度的跟踪&#xff0c;都能有条不紊地进行。产品经理可以通过禅道制定合理的产品规划&#xff0c;…

实用宝典:元器件外贸独立站电子元件数据库设置完全手册

对于投身于元器件外贸领域的企业来说&#xff0c;如何建立一个既能凸显自身特色又具备高度功能性与良好用户体验的独立站&#xff1f;而在这一过程中&#xff0c;#电子元件数据库#作为独立站的核心要素之一&#xff0c;它的构建质量和管理方式又将如何直接影响网站的整体竞争力…

BMS、EMS PCS 简介

1 储能系统的构成 完整的电化学储能系统主要由电池组、电池管理系统&#xff08;BMS&#xff09;、能量管理系统&#xff08;EMS&#xff09;、储能变流器&#xff08;PCS&#xff09;以及其他电气设备构成。 在储能系统中&#xff0c;电池组将状态信息反馈给电池管理系统BMS&…

zookeeper客户端

启动单机版的zookeeper 配置Maven环境 (1) IDEA自带maven (2) 更新Maven库镜像地址&#xff1a; ① 拷贝D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\plugins\maven\lib\maven3\conf\settings.xml [IntelliJ的安装目录]到 C:/用户/username/.m2 (如果.m2文件不存在&…

前后分离项目记录

一.前端设置 1.打包问题 打包报错 Thread Loader时&#xff0c;增加以下代码&#xff1a; 2.上线时api设置 二.Nginx问题 1.缓存问题&#xff1a;添加如下代码以禁止缓存&#xff0c;否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加CrossOrigin注解即可 3.上线时co…

人工智能风险预警以及区块链解决方案探索

​​发表时间&#xff1a;2024年9月26日 一个专家小组在为世界经济论坛撰写的报告中警示道&#xff0c;人工智能&#xff08;以下均简称为AI&#xff09;技术增加了各类组织遭受攻击的风险&#xff0c;并带来了训练数据污染和提示词注入攻击等新威胁。由于训练和测试数据库的庞…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程&#xff0c;即从具体的事实归结出一般性规律&#xff1b;后者则是从一般到特殊的“特化”(specialization)过程&#xff0c;即从基础原理推演出具体状况。例如&a…

笔试强训10.14

注意&#xff1a; 1.使用strcpy是把右参数赋值给左参数&#xff0c;而且左参数必须有终止符\0。 2.注意当输入的字符串的最长连续数字串在最后时&#xff0c;此时就不会进行else的判断&#xff0c;需要出了while循环后再进行判断。 #include <iostream> #include <…

Java面试宝典-WEB学习

Java web学习 目录 Java web学习 1、说说 Servlet 的基本架构 2、说一说 Servlet 的生命周期? 3、如何实现一个自定义的 servlet&#xff1f; 4、servlet中有哪些核心类&#xff1f;都有什么特点&#xff1f; 5、什么情况下调用 doGet()和 doPost()&#xff1f; 6、request.ge…

Attention Is All You Need论文翻译

论文名称 注意力即是全部 论文地址 https://user.phil.hhu.de/~cwurm/wp-content/uploads/2020/01/7181-attention-is-all-you-need.pdf 摘要 主流的序列转导模型基于复杂的递归或卷积神经网络&#xff0c;这些网络包含编码器和解码器。性能最好的模型通过注意力机制将编码器和…

谷歌-BERT-第一步:模型下载

1 需求 需求1&#xff1a;基于transformers库实现自动从Hugging Face下载模型 需求2&#xff1a;基于huggingface-hub库实现自动从Hugging Face下载模型 需求3&#xff1a;手动从Hugging Face下载模型 2 接口 3.1 需求1 示例一&#xff1a;下载到默认目录 from transform…

第十一章 RabbitMQ之消费者确认机制

目录 一、介绍 二、演示三种ACK方式效果 2.1. none: 不处理 2.1.1. 消费者配置代码 2.1.2. 生产者主要代码 2.1.3. 消费者主要代码 2.1.4. 运行效果 2.2. manual&#xff1a;手动模式 2.3. auto&#xff1a;自动模式 一、介绍 消费者确认机制&#xff08;Consume…