【机器学习】探究Q-Learning通过学习最优策略来解决AI序列决策问题

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客

系列专栏:机器学习系列专栏
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)! 

目录

 一.AI序列决策问题

1.序列决策问题的特点:

2.解决序列决策问题的AI方法:

3.序列决策问题的应用场景:

二.Q-Learning算法通过学习最优策略

1. 初始化

2. 探索与利用

3. 更新规则

4. 收敛与最优策略

5. 离线与在线学习

6. 应用

三.通过经典的“冰湖”问题来解析Q-Learning算法

环境设置

Q表初始化 

算法流程 

 简化版Python代码


 一.AI序列决策问题

AI序列决策问题是指在人工智能领域中,智能体需要在一个序列的环境中做出一系列决策,以达到某个目标或最大化某种累积奖励的问题。这类问题通常涉及到强化学习,其中智能体通过与环境的交互来学习最优的行为策略。

1.序列决策问题的特点:

  1. 时间维度:决策不是一次性的,而是需要在一系列时间步骤中进行。每个决策都会影响后续的状态和可能的决策。

  2. 状态变化:智能体的每个决策都会使环境从一个状态转移到另一个状态。状态可以是环境的描述,如游戏的当前分数、机器人的位置等。

  3. 奖励反馈:智能体在每个时间步骤做出决策后,环境会提供一个奖励(或惩罚),这是对智能体决策好坏的反馈。

  4. 长期目标:智能体的目标通常是长期的,比如最大化累积奖励、达到最终的胜利状态或完成任务。

  5. 不确定性:智能体在做出决策时可能无法完全了解环境的全部特性,因此需要在不确定性中做出最优的选择。

2.解决序列决策问题的AI方法:

  1. 强化学习:通过智能体与环境的交互来学习最优策略。智能体通过尝试不同的行动并接收环境的奖励或惩罚来学习。

  2. 动态规划:一种基于模型的优化方法,通过预测未来的状态和奖励来计算当前行动的价值。

  3. 蒙特卡洛方法:通过随机模拟来估计行动的价值,适用于难以精确建模的环境。

  4. 时序差分学习:结合了动态规划和蒙特卡洛方法的特点,通过学习状态和行动之间的差异来更新价值估计。

  5. 深度学习:使用深度神经网络来近似复杂的价值函数或策略函数,尤其在状态空间高维且连续时表现出色。

3.序列决策问题的应用场景:

  • 游戏AI:如棋类游戏、电子游戏等,智能体需要通过一系列行动来赢得比赛。
  • 机器人控制:机器人需要根据环境的变化做出连续的移动和操作决策。
  • 自动驾驶汽车:汽车需要根据路况和交通规则做出连续的驾驶决策。
  • 资源管理:如电网管理、网络带宽分配等,需要根据实时数据做出一系列调度决策。

AI序列决策问题是人工智能中一个非常重要且活跃的研究领域,它不仅挑战着智能体在复杂环境中的学习能力,也推动了AI技术在多个领域的应用和发展。

二.Q-Learning算法通过学习最优策略

Q-Learning算法是一种强化学习方法,它专注于学习一个名为Q函数的值表,该值表估计了在给定状态下采取特定行动所能获得的长期回报。Q-Learning的目标是找到一个最优策略,即在每个状态下选择能够最大化长期回报的行动。这个过程可以分为以下几个关键步骤:

1. 初始化

在开始学习之前,Q函数的初始值通常被设置为零。这意味着在没有任何经验的情况下,对于任何给定的状态和行动组合,其预期的长期回报都被假定为零。

2. 探索与利用

智能体在环境中执行行动时,需要在探索新行动和利用已知最优行动之间做出权衡。探索是指尝试新的行动以发现更有价值的策略;利用是指基于当前知识选择最佳的已知行动。Q学习算法通常使用ε-greedy策略或其他方法来平衡探索和利用。

3. 更新规则

Q-Learning 的核心是其更新规则,Q-Learning的迭代公式是著名的贝尔曼方程:,该规则根据以下公式来更新Q值: 

上式左端的Q(s,a)是状态s下动作a的新Q值;右边的Q(s,a)是原来的Q值;R是执行动作a后得到的奖励;maxQ(s,a,)是下一状态 S', 下,所有的动作 a', 中最大的Q值;参数0≤α≤1,0≤ϒ≤1。

常用其简化形式,取 α=1,方程为

 

  • Q(s,a) 是当前状态-行动对的Q值。
  • α 是学习率,控制新信息覆盖旧信息的速度。
  • R 是收到的即时奖励。
  • γ 是折扣因子,它决定了未来奖励的当前价值。
  • 's′ 是行动后的新状态。
  • maxα′​Q(s′,a′) 是新状态下所有可能行动的最大Q值。 

这个更新规则的目的是根据即时奖励和新状态下的最佳预期回报来调整当前状态-行动对的Q值。

Q值更新方法:

随机选一个初始状态 s

看当前状态 s 可以转到哪?随机选一个 s',得到奖励 R

再看新状态 s',可以转到哪?求出这些状态的最大的Q值(状态没变,还是 s',)

代入公式计算,并更新 Q(s,a),此时当前位置变成了s'

如果s',已是目标状态,则本片段迭代结束;否则从s',开始,重复上面操作,直至s',到达目标状态,即完成了一个迭代片段。如下图。

 

 这里奖励矩阵的作用是,查看各个状态可以直接转移到其它哪些状态。Q值矩阵表示的是,各个状态及动作的Q值。

4. 收敛与最优策略

随着智能体不断地与环境交互并更新Q值,Q函数会逐渐收敛到最优Q函数。最优Q函数提供了在每个状态下采取哪个行动可以最大化长期回报的确切信息。一旦Q函数收敛,智能体可以简单地选择具有最高Q值的行动来执行,这样的策略被称为贪婪策略,它对应于最优策略。

5. 离线与在线学习

Q-Learning可以在线进行,即智能体在实际探索环境的同时更新Q值;也可以离线进行,即智能体从一个已经收集的经验数据集(称为回放缓冲区)中学习。离线学习有助于打破数据之间的时间相关性,提高学习的稳定性。

6. 应用

Q-Learning算法已经被成功应用于多种领域,包括游戏、机器人控制、资源管理等。它能够处理离散状态和行动空间的问题,并且在某些情况下,它能够学习到非常复杂的策略。

总结来说,在实际应用中,一旦智能体学习到了最优策略,它就可以在环境中执行该策略来完成任务或游戏。例如,在游戏AI中,智能体可以使用最优策略来赢得比赛;在机器人控制中,智能体可以使用最优策略来高效地导航和执行任务。Q-Learning能够解决AI中的序列决策问题,使智能体能够在复杂的环境中做出最优的决策。这种方法不需要预先知道环境的全部动态,也不需要大量的标记数据,因此它非常适合于那些难以直接建模的复杂问题。

三.通过经典的“冰湖”问题来解析Q-Learning算法

                                   

“冰湖”问题是一个格子世界,智能体(通常表示为小人)从起点开始,目标是到达终点(通常标记为G)。在这个过程中,小人需要避开冰洞(标记为H),并且必须面对不可控的滑动。每次小人尝试移动时,有1/3的概率会滑动到相邻的非目标格子,这增加了问题的难度。

环境设置

  • 状态(State):每个格子代表一个状态。
  • 行动(Action):智能体可以选择向上、向下、向左或向右移动。
  • 奖励(Reward):除了到达目标位置获得正奖励外,每次移动通常没有奖励。掉入冰洞会得到负奖励。
  • 折扣因子(Gamma):用于计算未来奖励的当前价值。

Q表初始化 

Q表是一个二维数组,其行数等于状态数量,列数等于行动数量。所有Q值最初被初始化为零,表示智能体对环境一无所知。

在这个图示中,s1sn 表示不同的状态,每个状态对应四个可能的行动(上、下、左、右)。每个单元格的值初始化为零。随着智能体与环境的交互,这些值将根据Q学习算法的更新规则逐渐改变,以反映在特定状态下采取特定行动的预期累积奖励。 

注意:

这个图示是一个简化的版本,实际的Q表可能会更大,并且状态和行动的数量将根据具体的问题环境而定。此外,实际的Q表可能不会以这种二维表格的形式直观展示,而是作为一个多维数组在计算机程序中进行管理和更新。

算法流程 

  1. 导入必要的库并创建环境。
  2. 初始化Q表和其他超参数,如学习率(Learning Rate)、折扣因子(Gamma)、探索率(Epsilon)等。
  3. 对于每一回合(Episode)的训练:
    • 重置环境并获取初始状态。
    • 在状态下选择行动,可以是随机选择(探索)或基于当前Q表选择最大Q值的行动(利用)。
    • 执行行动并观察新状态和奖励。
    • 如果达到终止条件(如掉入冰洞或到达目标),则结束该回合。
    • 更新Q表:  Q(s,a)←Q(s,a)+α[r+γmaxα′​Q(s′,a′)−Q(s,a)]
    • 根据需要调整探索率(Epsilon)。
    • 随着训练的进行,逐渐减少探索率,以便智能体更多地利用已学到的知识。
    • 训练完成后,使用训练好的Q表来指导智能体行动。

 简化版Python代码

这个例子使用了gym库,它是一个常用的强化学习环境集合

import numpy as np
import gym# 初始化环境
env = gym.make('FrozenLake-v1')
env.seed(0)# 初始化Q表
action_space_size = env.action_space.n
state_space_size = env.observation_space.n
Q = np.zeros((state_space_size, action_space_size))# 设置超参数
learning_rate = 0.8
discount_factor = 0.95
num_episodes = 5000
epsilon = 1.0  # 初始探索率
min_epsilon = 0.01  # 最小探索率
decay_rate = 0.005  # 探索率衰减率for episode in range(num_episodes):state = env.reset()total_reward = 0done = Falsewhile not done:# 选择行动if np.random.rand() < epsilon:action = env.action_space.sample()else:action = np.argmax(Q[state, :])# 执行行动并获取新状态和奖励new_state, reward, done, _ = env.step(action)total_reward += reward# 更新Q表if done:next_state = Nonemax_future_Q = 0else:next_state = new_statemax_future_Q = np.max(Q[next_state, :])old_Q = Q[state, action]Q[state, action] = (1 - learning_rate) * old_Q + learning_rate * (reward + discount_factor * max_future_Q)state = new_stateepsilon = min_epsilon + (epsilon - min_epsilon) * np.exp(-decay_rate * episode)print(f'Episode {episode}: Total reward = {total_reward}')# 完成训练后,使用Q表来玩冰湖游戏
env.reset()
state = env.reset()
done = False
while not done:action = np.argmax(Q[state, :])env.step(action)state = env.unwrapped.observation  # 获取下一状态env.render()  # 可视化环境

 注意:这只是一个简化的例子,实际的强化学习算法实现可能会更加复杂,并且需要对特定问题进行调整。此外,为了达到更好的性能,可能需要调整超参数、使用更复杂的函数近似方法(如深度学习模型),或者采用其他高级技术。在实际应用中,还需要对算法进行调优和测试,以确保其在特定任务上的有效性和稳定性。

 感谢你的阅读,祝你一天愉快!

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

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

相关文章

实现联系人前后端界面,实现分页查询04.15

实现联系人前后端界面&#xff0c;实现分页查询项目包-CSDN博客 项目结构 数据库中建立两个表&#xff1a; 完整的后端目录 建立联系人People表&#xff0c;分组Type表&#xff0c;实现对应实体类 根据需求在mapper中写对应的sql语句 查询所有&#xff0c;删除&#xff0c;添…

C语言学习笔记之指针(二)

指针基础知识&#xff1a;C语言学习笔记之指针&#xff08;一&#xff09;-CSDN博客 目录 字符指针 代码分析 指针数组 数组指针 函数指针 代码分析&#xff08;出自《C陷阱和缺陷》&#xff09; 函数指针数组 指向函数指针数组的指针 回调函数 qsort() 字符指针 一…

树莓派安装tensorflow

树莓派安装tensorflow 使用编译好的版本自己选择版本进行编译armv71 架构 教程转载 使用编译好的版本 下载tensorflow编译好的版本 https://github.com/lhelontra/tensorflow-on-arm/tags由于python版本支持有限可能需要自己安装python 安装对应的python 自己选择版本进行编译…

使用undetected-chromedriver遇到的问题及解决方法,以及它使用SOCKS代理的问题

环境&#xff1a;python3.8.10 uc的安装方法&#xff1a; pip38 install undetected-chromedriver 上测试代码&#xff1a; import undetected_chromedriver as uc driver uc.Chrome() driver.get(https://www.baidu.com) driver.save_screenshot(baidu.png)报错&#xff…

【C++学习】map和set

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 四、set 4.1 set的介绍 4.2 set的使用 4.2.1 set的模板参数列表 4.2.2 set的构造 4.2.3 set的容量 4.2.4 set修改操作 4.2.5 set的使用举例 五、map 5.1 map的介绍 5.2 map的使用 5.2.1 map的模板参数说…

STM32H7 QSPI的寄存器和功能介绍

目录 概述 1 认识QSPI 1.1 QSPI介绍 1.2 QUADSPI 主要特性 2 QUADSPI 功能说明 2.1 双闪存模式禁止 2.2 双闪存模式使能 3 QUADSPI 的用法 3.1 间接模式的操作步骤 3.1.1 QUADSPI 间接模式时配置帧模式 3.1.2 写控制寄存器 (QUADSPI_CR) 3.1.3 写通信配置寄存器 (…

Linux LVM与磁盘配额

目录 一.LVM概述 LVM LVM机制的基本概念 PV&#xff08;Physical Volume&#xff0c;物理卷&#xff09; VG&#xff08;Volume Group&#xff0c;卷组&#xff09; LV&#xff08;Logical Volume&#xff0c;逻辑卷&#xff09; 二.LVM 的管理命令 三.创建并使用LVM …

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式&#xff0c;因为不能自动检测副作用&#xff0c;有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…

数据结构进阶之堆

今天我们学习的是数据结构里面的堆&#xff0c;大家先看看我们今天要学习的内容 一、堆概念及认识 在学习堆之前我们得先明白完全二叉树是什么样子&#xff0c;因为堆是依据完全二叉树的结构来实现的&#xff0c;所以在这里我先告诉大家完全二叉树的是什么&#xff0c;如下图…

【C++】力扣OJ题:构建杨辉三角

Hello everybody!今天给大家介绍一道我认为比较经典的编程练习题&#xff0c;之所以介绍它是因为这道题涉及到二维数组的构建&#xff0c;如果用C语言动态构建二维数组是比较麻烦的&#xff0c;而用C中STL的vector<vector<int>>,就可以立马构建出来&#xff0c;这也…

Jackson 2.x 系列【25】Spring Boot 集成之起步依赖、自动配置

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 本系列Spring Boot 版本 3.2.4 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 1. 前言2. 起步依赖3. 自动配置3.1 JacksonPrope…

【图文教程】在PyCharm中导入Conda环境

文章目录 &#xff08;1&#xff09;在Anaconda Prompt中新建一个conda虚拟环境&#xff08;2&#xff09;使用PyCharm打开需要搭建环境的项目&#xff08;3&#xff09;配置环境 &#xff08;1&#xff09;在Anaconda Prompt中新建一个conda虚拟环境 conda create - myenv py…

算法|基础算法|高精度算法

基础算法|位运算 1.高精度加法 2.高精度减法 3.高精度乘法 4.高精度除法 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 高精度加法 …

cpu调度与IO

内存中有A、B两个程序&#xff0c;CPU先依照顺序执行A&#xff0c;当CPU执行A的IO指令后&#xff0c;向磁盘发送IO请求&#xff0c;程序A进入阻塞队列中&#xff0c;等待IO过程结束。CPU此时执行程序B。DMA将磁盘中的数据copy到内存A的buff中&#xff0c;此时操作系统获取到IO任…

想开发多语言同城送餐app?这10个关键问题需详解

在当今数字化时代&#xff0c;多语言同城送餐app开发成为了引人注目的商业机会。随着人们生活节奏的加快&#xff0c;外卖行业逐渐成为人们生活中不可或缺的一部分。如果您计划开发一款多语言同城送餐app&#xff0c;必须要谨慎考虑一些关键问题&#xff0c;才能确保项目的成功…

Docker Container (容器) 常见命令

Docker 容器的生命周期 什么是容器&#xff1f; 通俗地讲&#xff0c;容器是镜像的运行实体。镜像是静态的只读文件&#xff0c;而容器带有运行时需要的可写文件层&#xff0c;并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容 器有初建、运行、停止、暂停和删除…

stm32实现hid鼠标

启动CubelMX 选择芯片&#xff08;直接输入stm32f103zet6) 设置时钟 如下图 usb设置 配置usb设备 调试端口设置 配置时钟 项目输出设置 打开工程&#xff08;后记&#xff1a;此工程含有中文不能编译通过) 配置项目 配置调试器 编译无法通过 删除路径中的中文&#xff0c;以及…

飞桨Ai(二)paddle使用CPU版本可以正常识别,切换为GPU版本时无法识别结果

一、问题描述&#xff1a; 刚开始用paddle的CPU版本&#xff0c;对训练好的模型进行推理&#xff0c;正常识别出想要的结果后来尝试使用paddle的GPU版本&#xff0c;然后发现识别出来是空的 二、系统思路&#xff1a; 最终系统环境如下&#xff1a; 系统&#xff1a;win10 …

CSS3 max/min-content及fit-content、fill-available值的详解

c3中对width的值多了几个值&#xff1a;fill-available, max-content, min-content, 以及fit-content。 1.width:fill-available 我们在页面中扔一个没有其他样式的<div>元素&#xff0c;则&#xff0c;此时&#xff0c;该<div>元素的width表现就是fill-availabl…

Towards IP Geolocation Using Delay and TopologyMeasurements(TBG)(2006年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:492 Katz-Bassett E, John J P, Krishnamurthy A, et al. Towards IP geolocation using delay and topology …