【强化学习入门笔记】 2.1 值迭代

本系列为学习赵世钰老师的《强化学习的数学原理》所作的学习笔记.

本节我们将介绍强化学习中的值迭代求解方法.

2.1.1 算法步骤

在1.5节我们介绍了通过迭代可以求贝尔曼最优公式的最优解, 这个方法就叫值迭代:

v k + 1 = max ⁡ π ∈ Π ( r π + γ P π v k ) , k = 0 , 1 , 2 , … v_{k+1}=\max _{\pi \in \Pi}\left(r_\pi+\gamma P_\pi v_k\right), \quad k=0,1,2, \ldots vk+1=πΠmax(rπ+γPπvk),k=0,1,2,

当迭代数 k → ∞ k \rightarrow \infty k时, v k , π k v_k,\pi_k vk,πk会收敛到最优值. 它的算法步骤为:

2.1.1.1 更新策略 π \pi π

基于当前 v k , π k v_k,\pi_k vk,πk, 求最优化问题: 使得上式状态值最大的最优策略 π \pi π, 并将其更新给 π k + 1 \pi_{k+1} πk+1

π k + 1 = arg ⁡ max ⁡ π ( r π + γ P π v k ) , \pi_{k+1}=\arg \max _\pi\left(r_\pi+\gamma P_\pi v_k\right), πk+1=argπmax(rπ+γPπvk),

式子中的矩阵展开可以写为:

π k + 1 ( s ) = arg ⁡ max ⁡ π ∑ a π ( a ∣ s ) ( ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v k ( s ′ ) ) ⏟ q k ( s , a ) , s ∈ S . \pi_{k+1}(s)=\arg \max _\pi \sum_a \pi(a \mid s) \underbrace{\left(\sum_r p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_k\left(s^{\prime}\right)\right)}_{q_k(s, a)}, \\ \quad s \in \mathcal{S} . πk+1(s)=argπmaxaπ(as)qk(s,a) (rp(rs,a)r+γsp(ss,a)vk(s)),sS.

1.5节我们介绍过了, 最优解是一个确定贪婪策略, 即只有最佳动作的选择概率是1:

π k + 1 ( a ∣ s ) = { 1 , a = a k ∗ ( s ) 0 , a ≠ a k ∗ ( s ) \pi_{k+1}(a \mid s)= \begin{cases}1, & a=a_k^*(s) \\ 0, & a \neq a_k^*(s)\end{cases} πk+1(as)={1,0,a=ak(s)a=ak(s)

其中动作 a k ∗ ( s ) a_k^*(s) ak(s)是最优解: a k ∗ ( s ) = arg ⁡ max ⁡ a q k ( s , a ) a_k^*(s)=\arg \max _a q_k(s, a) ak(s)=argmaxaqk(s,a)

2.1.1.2 更新值 v v v

得到新的策略 π k + 1 \pi_{k+1} πk+1之后, 更新新的值 v k + 1 v_{k+1} vk+1即可:

v k + 1 = r π k + 1 + γ P π k + 1 v k , v_{k+1}=r_{\pi_{k+1}}+\gamma P_{\pi_{k+1}} v_k, vk+1=rπk+1+γPπk+1vk,

式子展开可以写成:

v k + 1 ( s ) = ∑ a π k + 1 ( a ∣ s ) ( ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v k ( s ′ ) ) ⏟ q k ( s , a ) , s ∈ S . v_{k+1}(s)=\sum_a \pi_{k+1}(a \mid s) \underbrace{\left(\sum_r p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_k\left(s^{\prime}\right)\right)}_{q_k(s, a)}, \\ s \in \mathcal{S} . vk+1(s)=aπk+1(as)qk(s,a) (rp(rs,a)r+γsp(ss,a)vk(s)),sS.

因为最优策略 π k + 1 \pi_{k+1} πk+1是一个贪婪策略, 所以上式实际上就是最大的动作值 q k ( s , a ) q_k(s, a) qk(s,a), 即:

v k + 1 ( s ) = max ⁡ a q k ( s , a ) . v_{k+1}(s)=\max _a q_k(s, a) . vk+1(s)=amaxqk(s,a).

2.1.1.3 伪代码

  • 输入: 所有的 p ( r ∣ s , a ) , p ( s ′ ∣ s , a ) p(r \mid s, a), p\left(s^{\prime} \mid s, a\right) p(rs,a),p(ss,a)都是已知的, 状态值初始解 v 0 v_0 v0
  • 输出: 贝尔曼最优公式的最优解: v ∗ , π ∗ v^*,\pi^* v,π
  • 迭代终止条件: ∥ v k − v k − 1 ∥ < e p s i l o n \left\|v_k-v_{k-1}\right\|<epsilon vkvk1<epsilon, e p s i l o n epsilon epsilon是一个极小值超参数
  •  For every state  s ∈ S , do  \text { For every state } s \in \mathcal{S} \text {, do }  For every state sS, do 
    •  For every action  a ∈ A ( s ) , do  \text { For every action } a \in \mathcal{A}(s) \text {, do }  For every action aA(s), do 
      • 计算  q-value:  q k ( s , a ) = ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v k ( s ′ ) \text { q-value: } q_k(s, a)=\sum_r p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_k\left(s^{\prime}\right)  q-value: qk(s,a)=rp(rs,a)r+γsp(ss,a)vk(s)
    • 找到最优解 a k ∗ ( s ) = arg ⁡ max ⁡ a q k ( s , a ) a_k^*(s)=\arg \max _a q_k(s, a) ak(s)=argmaxaqk(s,a), 即使得动作值最大的动作
    • 更新策略: π k + 1 ( a ∣ s ) = { 1 , a = a k ( s ) 0 , a ≠ a k ( s ) \pi_{k+1}(a \mid s)= \begin{cases}1, & a=a_k^(s) \\ 0, & a \neq a_k^(s)\end{cases} πk+1(as)={1,0,a=ak(s)a=ak(s)
    • 更新值: v k + 1 ( s ) = max ⁡ a q k ( s , a ) v_{k+1}(s)=\max _a q_k(s, a) vk+1(s)=maxaqk(s,a)

2.1.2 例子

仿真世界如图所示, 奖励设计如下:

  • 抵达禁止格或边界的奖励是-1: r boundary  = r forbidden  = − 1 r_{\text {boundary }}=r_{\text {forbidden }}=-1 rboundary =rforbidden =1
  • 抵达终点的奖励是1: r target  = 1 r_{\text {target }}=1 rtarget =1
  • γ = 0.9 \gamma=0.9 γ=0.9
  • 其他行为奖励是0

根据这个奖励设计, 该仿真场景中的每个状态和动作的动作值计算公式如下:

首先初始化 v 0 ( s 1 ) = v 0 ( s 2 ) = v 0 ( s 3 ) = v 0 ( s 4 ) = 0 v_0\left(s_1\right)=v_0\left(s_2\right)=v_0\left(s_3\right)=v_0\left(s_4\right)=0 v0(s1)=v0(s2)=v0(s3)=v0(s4)=0, 然后我们开始值迭代算法:

2.1.2.1 k=0

我们计算出了所有状态和动作组合的动作值:

每个状态都选择动作值结果最大的作为最优动作, 更新所有状态的最优策略:

π 1 ( a 5 ∣ s 1 ) = 1 , π 1 ( a 3 ∣ s 2 ) = 1 , π 1 ( a 2 ∣ s 3 ) = 1 , π 1 ( a 5 ∣ s 4 ) = 1 \pi_1\left(a_5 \mid s_1\right)=1, \quad \pi_1\left(a_3 \mid s_2\right)=1, \quad \pi_1\left(a_2 \mid s_3\right)=1, \quad \pi_1\left(a_5 \mid s_4\right)=1 π1(a5s1)=1,π1(a3s2)=1,π1(a2s3)=1,π1(a5s4)=1

接着更新所有状态的状态值

v 1 ( s 1 ) = 0 , v 1 ( s 2 ) = 1 , v 1 ( s 3 ) = 1 , v 1 ( s 4 ) = 1 v_1\left(s_1\right)=0, \quad v_1\left(s_2\right)=1, \quad v_1\left(s_3\right)=1, \quad v_1\left(s_4\right)=1 v1(s1)=0,v1(s2)=1,v1(s3)=1,v1(s4)=1

最后计算 ∥ v 1 − v 0 ∥ = 3 \left\|v_1-v_{0}\right\|=\sqrt3 v1v0=3 , 继续迭代

2.1.2.2 k=1

计算出了所有状态和动作组合的动作值:

每个状态都选择动作值结果最大的作为最优动作, 更新所有状态的最优策略:

π 2 ( a 3 ∣ s 1 ) = 1 , π 2 ( a 3 ∣ s 2 ) = 1 , π 2 ( a 2 ∣ s 3 ) = 1 , π 2 ( a 5 ∣ s 4 ) = 1 \pi_2\left(a_3 \mid s_1\right)=1, \quad \pi_2\left(a_3 \mid s_2\right)=1, \quad \pi_2\left(a_2 \mid s_3\right)=1, \quad \pi_2\left(a_5 \mid s_4\right)=1 π2(a3s1)=1,π2(a3s2)=1,π2(a2s3)=1,π2(a5s4)=1

接着更新所有状态的状态值

v 2 ( s 1 ) = γ 1 , v 2 ( s 2 ) = 1 + γ 1 , v 2 ( s 3 ) = 1 + γ 1 , v 2 ( s 4 ) = 1 + γ 1. v_2\left(s_1\right)=\gamma 1, \quad v_2\left(s_2\right)=1+\gamma 1, \quad v_2\left(s_3\right)=1+\gamma 1, \quad v_2\left(s_4\right)=1+\gamma 1 . v2(s1)=γ1,v2(s2)=1+γ1,v2(s3)=1+γ1,v2(s4)=1+γ1.

最后计算 ∥ v 2 − v 1 ∥ = 2 γ \left\|v_2-v_{1}\right\|=2\gamma v2v1=2γ, 继续迭代

2.1.2.3 k=2

计算出了所有状态和动作组合的动作值:

 q-table  a 1 a 2 a 3 a 4 a 5 s 1 − 1 + γ 2 − 1 + γ ( 1 + γ ) 0 + γ ( 1 + γ ) − 1 + γ 2 0 + γ 2 s 2 − 1 + γ ( 1 + γ ) − 1 + γ ( 1 + γ ) 1 + γ ( 1 + γ ) 0 + γ 2 − 1 + γ ( 1 + γ ) s 3 0 + γ 2 1 + γ ( 1 + γ ) − 1 + γ ( 1 + γ ) − 1 + γ ( 1 + γ ) 0 + γ ( 1 + γ ) s 4 − 1 + γ ( 1 + γ ) − 1 + γ ( 1 + γ ) − 1 + γ ( 1 + γ ) 0 + γ ( 1 + γ ) 1 + γ ( 1 + γ ) \begin{array}{c|l|l|l|l|l}\hline \text { q-table } & a_1 & a_2 & a_3 & a_4 & a_5 \\\hline s_1 & -1+\gamma^2 & -1+\gamma(1+\gamma) & 0+\gamma(1+\gamma) & -1+\gamma^2 & 0+\gamma^2 \\\hline s_2 & -1+\gamma(1+\gamma) & -1+\gamma(1+\gamma) & 1+\gamma(1+\gamma) & 0+\gamma^2 & -1+\gamma(1+\gamma) \\\hline s_3 & 0+\gamma^2 & 1+\gamma(1+\gamma) & -1+\gamma(1+\gamma) & -1+\gamma(1+\gamma) & 0+\gamma(1+\gamma) \\\hline s_4 & -1+\gamma(1+\gamma) & -1+\gamma(1+\gamma) & -1+\gamma(1+\gamma) & 0+\gamma(1+\gamma) & 1+\gamma(1+\gamma) \\\hline\end{array}  q-table s1s2s3s4a11+γ21+γ(1+γ)0+γ21+γ(1+γ)a21+γ(1+γ)1+γ(1+γ)1+γ(1+γ)1+γ(1+γ)a30+γ(1+γ)1+γ(1+γ)1+γ(1+γ)1+γ(1+γ)a41+γ20+γ21+γ(1+γ)0+γ(1+γ)a50+γ21+γ(1+γ)0+γ(1+γ)1+γ(1+γ)

每个状态都选择动作值结果最大的作为最优动作, 更新所有状态的最优策略:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

π 3 ( a 3 ∣ s 1 ) = 1 , π 3 ( a 3 ∣ s 2 ) = 1 , π 3 ( a 2 ∣ s 3 ) = 1 , π 3 ( a 5 ∣ s 4 ) = 1 \pi_3\left(a_3 \mid s_1\right)=1, \quad \pi_3\left(a_3 \mid s_2\right)=1, \quad \pi_3\left(a_2 \mid s_3\right)=1, \quad \pi_3\left(a_5 \mid s_4\right)=1 π3(a3s1)=1,π3(a3s2)=1,π3(a2s3)=1,π3(a5s4)=1

接着更新所有状态的状态值

v 3 ( s 1 ) = 1.71 , v 3 ( s 2 ) = 2.71 , v 3 ( s 3 ) = 2.71 , v 3 ( s 4 ) = 2.71 v_3\left(s_1\right)=1.71, \quad v_3\left(s_2\right)=2.71, \quad v_3\left(s_3\right)=2.71, \quad v_3\left(s_4\right)=2.71 v3(s1)=1.71,v3(s2)=2.71,v3(s3)=2.71,v3(s4)=2.71

最后计算 ∥ v 3 − v 2 ∥ = 1.62 \left\|v_3-v_{2}\right\|=1.62 v3v2=1.62, 继续迭代

2.1.2.4 k=3,4

前面过程类似的, 最优策略没有变, 最后 ∥ v 4 − v 3 ∥ = 0.586 , ∥ v 5 − v 4 ∥ = . . . \left\|v_4-v_{3}\right\|=0.586, \left\|v_5-v_{4}\right\|=... v4v3=0.586,v5v4=...

说明已经收敛. 这个例子笔者有个问题, 就是值迭代中即使最优策略已经不变了, 状态值是在变化的, 但是还需要几次循环才能达到收敛条件. 那么当迭代中最优策略已经不变了, 是否可以作为终止迭代的条件, 如果不可以是因为什么呢?待后续学习过程中解答.

推荐阅读

  • 端到端理论与实战
  • 动手学轨迹预测
  • 动手学运动规划
  • 动手学行为决策
  • 强化学习入门笔记

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集

本数据集支持YOLO&#xff0c;COCO&#xff0c;VOC三种格式标记汽车车牌&#xff0c;无论是新能源汽车还是油车都能识别标记&#xff0c;该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70&#xff05; 2800图片 有效集 20&#xff05; 800图片 测…

python基础:(八)文件

目录 一.从文件中读取数据1.1读取整个文件1.2文件路劲1.3逐行读取 二.写入文件 一.从文件中读取数据 各位小伙伴&#xff0c;文件这一块得好好学&#xff0c;多看多敲代码&#xff0c;以后处理数据&#xff0c;写爬虫少不了这个&#xff0c;先从基础&#xff08;简单的&#x…

输电线路故障测距研究

故障分析法容易受到过渡电阻、故障类型等因素的影响&#xff0c;从而造成测距误差较大。 行波法不受电力系统运行方式的影响&#xff0c;得到了广泛的应用。波头信息的提取方法主要有&#xff1a;小波变换、希尔伯特黄变换、TT变换等。 智能测距法逐渐被应用于输电线路故障测…

FPGA实战篇(IP核之MMCM/PLL实验)

1.MMCM/PLL IP 核简介 锁相环作为一种反馈控制电路&#xff0c;其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪&#xff0c;所以锁相环通常用于闭环跟踪电路。 锁相环在工作的过程中&#xff0c;当…

wordpress网站安装了Linux宝塔面板,限制IP地址访问网站,只能使用域名访问网站

一、Linux服务器安装Linux宝塔面板 这个步骤参考网上其他教程。 二、Linux宝塔面板部署wordpress网站 这个步骤参考网上其他教程&#xff0c;保证网站能够正常访问&#xff0c;并且使用Linux宝塔面板申请并部署了SSL证书&#xff0c;使用https协议默认443端口正常访问。 三…

顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍

大语言模型一般都是流式返回文字&#xff0c;如果等全部文字返回了一次性去TTS&#xff0c;那么延迟会非常严重&#xff0c;常用的方法就是通过标点符号断句&#xff0c;返回了一句话就提交给TTS。随着流TTS的出现&#xff0c;就可以直接把大模型返回的文字灌给流TTS&#xff0…

leetcode每日一题(20241210)

leetcode每日一题&#xff08;20241210&#xff09;今天依旧是棋盘类型的题目&#xff0c;但是今天的只是表面相关&#xff0c;看题&#xff1a; 935.骑士拨号器 题目描述&#xff1a; 象棋骑士有一个独特的移动方式&#xff0c;它可以垂直移动两个方格&#xff0c;水平移动一…

记录ubuntu22.04重启以后无法获取IP地址的问题处理方案

现象描述&#xff1a;我的虚拟机网络设置为桥接模式&#xff0c;输入ifconfig只显示127.0.0.1&#xff0c;不能连上外网。&#xff0c;且无法上网&#xff0c;用ifconfig只有如下显示&#xff1a; 1、sudo -i切换为root用户 2、输入dhclient -v 再输入ifconfig就可以看到多了…

MVC基础——市场管理系统(一)

文章目录 项目地址一、创建项目结构1.1 创建程序以及Controller1.2 创建View1.3 创建Models层,并且在Edit页面显示1.4 创建Layou模板页面1.5 创建静态文件css中间件二、Categories的CRUD2.1 使用静态仓库存储数据2.2 将Categorie的列表显示在页面中(List)2.3 创建_ViewImport.…

strncpy在复制含有多个\0的字符串时遇到的问题

strncpy在复制含有多个\0的字符串的时候&#xff0c;会产生截断&#xff0c;因为strncpy在读取源字符串的时候&#xff0c;遇到了\0&#xff0c;函数会认为该字符串已经结束了&#xff0c;然后会向目标字符串内填充\0。 char buffer[100] "ak\0jl";for (int i 0; i…

C# 网络编程--基础核心内容

在现今软件开发中&#xff0c;网络编程是非常重要的一部分&#xff0c;本文简要介绍下网络编程的概念和实践。 C#网络编程的主要内容包括以下几个方面‌&#xff1a; : 上图引用大佬的图&#xff0c;大家也关注一下&#xff0c;有技术有品质&#xff0c;有国有家&#xff0c;情…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发&#xff0c;考虑用DAC做一个前级输出&#xff0c;选择了DAC8552这个器件的一个模块&#xff0c;用了野火的指南者做主控&#xff0c;芯片是STM32F103VET6&#xff0c;主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

Elasticsearch入门之HTTP基础操作

RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…

计算机启动过程 | Linux 启动流程

注&#xff1a;本文为“计算机启动、 Linux 启动”相关文章合辑。 替换引文部分不清晰的图。 探索计算机的启动过程 Aleksandr Goncharov 2023/04/21 很多人对计算机的启动方式很感兴趣。只要设备开启&#xff0c;这就是魔法开始和持续的地方。在本文中&#xff0c;我们将概…

【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据和Excel和Shp格式的省市县三级逐月最低气温数据&#xff0c;原始的逐月最低气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月栅格数据我们采用求年平均值的方法得到逐年最…

Hash、HASHTABLE底层原理【Redis对象篇】

&#x1f3c6; 作者简介&#xff1a;席万里 ⚡ 个人网站&#xff1a;https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜&#xff0c;同时略懂Vue与React前端技术&#xff0c;也了解一点微信小程序开发。 &#x1f37b; 对计算机充满兴趣&#xff0c;愿意并且希望学习更多的技…

YOLOv11改进,YOLOv11添加GSConv卷积+Slim-neck,助力小目标检测,二次创新C3k2结构

实时目标检测在工业和研究领域中具有重要意义。在边缘设备上,巨大的模型难以满足实时检测的要求,而由大量深度可分离卷积(depth-wise separable convolution)构建的轻量级模型又无法达到足够的精度。作者引入了一种新的轻量级卷积技术——GSConv,以减轻模型重量同时保持精…

利用Java爬虫MinC根据ID获取商品详情的完整指南

在当今数字化时代&#xff0c;获取商品详情数据对于市场分析、价格监控和竞争对手分析至关重要。Java作为一种强大且广泛使用的编程语言&#xff0c;非常适合开发复杂的爬虫系统。本文将详细介绍如何利用Java编写爬虫程序来根据商品ID获取商品详情&#xff0c;并提供完整的代码…

IP地址中的网络号:定义、作用与重要性

在计算机网络中&#xff0c;IP地址是每台设备的唯一标识。它由网络号和主机号两部分组成&#xff0c;其中网络号用于标识一个特定的网络&#xff0c;而主机号则用于区分该网络内的不同设备。网络号的正确分配和管理&#xff0c;是IP网络互联互通的基础。本文将带您走进网络号的…

java_连接数据库的方法_后端处理_前端调用_打通整体思路

参考&#xff1a;14 尚上优选项目-平台管理端-权限管理模块-开发角色管理接口&#xff08;上&#xff09;_哔哩哔哩_bilibili 第一步. 定义数据 在数据库中定义好数据&#xff08;如role表格&#xff09;&#xff0c;在java后端定义好对应的实体类&#xff08;Role类&#xf…