强化学习(赵世钰版)-学习笔记(3.最优策略与贝尔曼最优方程)

news2025/3/12 19:41:42
这是本章在课程中的位置,属于基础工具中的最后一章,主要讨论了最优状态值(Optimal State Value)与最优策略(Optimal Policy),并介绍了对应的计算方法-贝尔曼最优方程(Bellman Optimality Equation,BOE)。
如果一个现有的策略不是最优的,那么如何提升呢?结论就是对策略进行改进。
比如起始状态是S1,当前的策略是在S1状态100%向右移动(S1上的右箭头)。但是通过对S1状态上各行为值的计算,可以看出来右移(A2)行为值取值并非最大,下移(A3)的行为值取值最大。
可以据此优化现有的策略,将策略在S1上的行为进行修改,从而增加整个策略的状态值。
状态值的作用就是用于衡量两个策略之间的优劣,如果对于同一个环境下,对于所有的状态s,策略Pi1的状态值均大于策略Pi2,则可以说策略Pi1由于策略Pi2,以下是相关的数学描述。
既然有了对比,那么会有一个策略Pi_star,它的状态值优于同一个环境下其他所有的策略,那么这个策略就叫做最优策略。
而计算获取最优策略的方法,就是贝尔曼最优方程,贝尔曼最优方程的形式如下。
与贝尔曼方程相比,前面多了个max符号,作用是从后续各种参数算出的结果中,找到最大的作为结果。这个跟最优化理论中的argmax不太一样,argmax指的是当后续函数取最大值时对应的参数。这个方程中的r,p(r|s,a),p(s'|s,a)等都是已知的,这表明整个环境信息是已知的,各状态的状态值是未知的,
贝尔曼最优方程的矩阵-向量形式为
对整个运算求max,等价于对每一行的运算求max
后面需要讨论的是,如何解这个方程,这个方程的解是否存在,方程的解是否唯一,以及如何将解转换成最优策略。
计算最优策略的方法是,首先固定住未来的状态值v(s'),仅计算当前状态值的最大值。
最后简化成了计算当前状态s下行为值期望的最大值,很显然最大值就是几个候选行为中,行为值最大的那个,下面是证明过程:
所以贝尔曼最优方程,这里通过简化,可以变成对当前状态值最大值的求解。
然后根据对相关行为值的计算,修改策略在当前状态下的行为选择。
贝尔曼最优方程,可以记作一个关于状态值v的方程,就是下面的v=f(v),因为前面的R_pi是当前状态下动作值的最大值(前面证过了)。
这里提出了一个新的概念,压缩映射或者压缩函数,指的是函数映射之后能缩小两个自变量之间的距离,数学表达如下
这个压缩函数或者压缩映射,存在一个固定点x_star,这个固定点的含义是x*=f(x*)。证明过程如下,主要是将自变量映射出的因变量,继续映射或者传入函数(一回事),这么不停的迭代,最后会逐渐收敛,整个迭代不会发生变化了。
回到贝尔曼最优方程,它的形式是
可以证明这个贝尔曼最优方程是一个压缩映射(证明过程用的是豆包)
那么根据压缩映射的性质,通过一个初始状态的状态值,通过迭代总会到一个固定点,既是最优点,这个方法叫做值迭代算法。
贝尔曼最优方程的解,其对应的策略就是整个环境的最优策略
最优策略的形式,就是每个状态都会100%选择行为值最大的策略。
那么对最优策略和最优状态值的决定因素是什么,是环境系统模型,奖励设置和折扣率。
奖励值决定了对一些行为的取舍,且奖励的绝对值大小并不重要,主要是各行为奖励的相对大小。而折扣率决定了策略的侧重,折扣率越接近于零则策略越短视,极端情况下降到零则可能永远到不了目标状态。
同时,最优策略也避免了绕路刷分的情况,因为通过折扣率完成了对绕路的惩罚,路径越长惩罚的越严重。
最后是本章的总结,贝尔曼最优方程的两种形式:元素形式与矩阵-向量形式。
通过压缩映射的性质,决定了贝尔曼最优方程可解,且解是唯一的。解贝尔曼最优方程的方法就是通过迭代法,结果会最终收敛。解贝尔曼最优方程的目的,是通过最优解找到最优状态值和最优策略。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

六十天前端强化训练之第十一天之事件机制超详解析

欢迎来到编程星辰海的博客讲解 目录 一、事件模型演进史 1.1 原始事件模型(DOM Level 0) 1.2 DOM Level 2事件模型 1.3 DOM Level 3事件模型 二、事件流深度剖析 2.1 捕获与冒泡对比实验 2.2 事件终止方法对比 三、事件委托高级应用 3.1 动态元…

调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录

调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录——从勾选一个选项到理解半主机模式,嵌入式开发的认知升级 📌 现象描述:调试与烧录的诡异差异 在线调试时 程序正常运行 - 独立运行时 设备无响应 ! 编译过程 0 Err…

基于SpringBoot实现旅游酒店平台功能八

一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高,旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求,旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…

ArcGIS Pro中字段的新建方法与应用

一、引言 在地理信息系统(GIS)的数据管理和分析过程中,字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计,字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件,为用户提…

c#面试题12

1.ApplicationPool介绍一下 c#里没有 2.XML 可扩展标记语言,一般以.xml文件格式的形式存在。可用于存储结构化的数据 3.ASP.NET的用户控件 将原始的控件,用户根据需要进行整合成一个新的控件 4.介绍一下code-Behind 即代码后置技术,就是…

Matlab中快速查找元素索引号

1、背景介绍 在算法设计过程中,有时候需要从一维/二维数组中,快速查找是否某个元素,以及该元素所在的位置。如一维矩阵[1 2 3 4 5 6 6 7 8]所示,元素6所在的位置为6 7。 2、函数测试 matlab中函数find()可以快速查找到指定元素所…

LabVIEW非线性拟合实现正弦波参数提取

LabVIEW的Nonlinear Curve Fit.vi基于Levenberg-Marquardt算法,能够实现非线性最小二乘拟合,包括正弦波三参数(幅值、频率、相位)的精确求解。该工具适用于非均匀采样、低信噪比信号等复杂场景,但需注意初始参数设置与…

S19文件格式详解:汽车ECU软件升级中的核心镜像格式

文章目录 引言一、S19文件格式的起源与概述二、S19文件的核心结构三、S19在汽车ECU升级中的应用场景四、S19与其他格式的对比五、S19文件实例解析六、工具链支持与安全考量七、未来趋势与挑战结语引言 在汽车电子控制单元(ECU)的软件升级过程中,S19文件(也称为Motorola S-…

Redis 缓存穿透、缓存击穿与缓存雪崩详解:问题、解决方案与最佳实践

目录 引言 1. 缓存穿透 1.1 什么是缓存穿透? 示例: 1.2 缓存穿透的原因 1.3 缓存穿透的解决方案 1.3.1 缓存空对象 1.3.2 布隆过滤器(Bloom Filter) 1.3.3 参数校验 2. 缓存击穿 2.1 什么是缓存击穿? 示例&…

Qt入门笔记

目录 一、前言 二、创建Qt项目 2.1、使用向导创建 2.2、最简单的Qt应用程序 2.2.1、main函数 2.2.2、widget.h文件 2.2.3、widget.cpp文件 2.3、Qt按键Botton 2.3.1、创建一个Botton 2.3.2、信号与槽 2.3.3、按键使用信号与槽的方法 2.4、文件Read与Write-QFile类 2…

C语言每日一练——day_4

引言 针对初学者,每日练习几个题,快速上手C语言。第四天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

下降路径最⼩和(medium)

题目描述: 给你一个 n x n 的 方形 整数数组 matrix ,请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列&#xff08…

redux_旧版本

reduxjs/toolkit(RTK)是 Redux 官方团队推出的一个工具集,旨在简化 Redux 的使用和配置。它于 2019 年 10 月 正式发布,此文章记录一下redux的旧版本如何使用,以及引入等等。 文件目录如下: 步骤 安装依…

18、TCP连接三次握手的过程,为什么是三次,可以是两次或者更多吗【高频】

三次握手的过程: 第一次握手:客户端 向 服务器 发送一个 SYN(也就是同步序列编号报文),请求建立连接。随后,客户端 进入 SYN_SENT 状态;服务器收到 SYN 之后,由 LISTEN 状态变为 SYN…

Ceph(2):Ceph简介

1 Ceph简介 Ceph使用C语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云…

wireshark 如何关闭混杂模式 wireshark操作

Fiddler和Wireshark都是进行抓包的工具:所谓抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。黑客常常会用抓包软件获取你非加密的上网数据,然后通过分析&#…

ChatGPT4.5详细介绍和API调用详细教程

OpenAI在2月27日发布GPT-4.5的研究预览版——这是迄今为止OpenAI最强大、最出色的聊天模型。GPT-4.5在扩大预训练和微调规模方面迈出了重要的一步。通过扩大无监督学习的规模,GPT-4.5提升了识别内容中的模式、建立内容关联和生成对于内容的见解的能力,但…

Unity DOTS从入门到精通之 自定义Authoring类

文章目录 前言安装 DOTS 包什么是Authoring1. 实体组件2. Authoring类 前言 DOTS(面向数据的技术堆栈)是一套由 Unity 提供支持的技术,用于提供高性能游戏开发解决方案,特别适合需要处理大量数据的游戏,例如大型开放世…

一键换肤的Qt-Advanced-Stylesheets

项目简介 能在软件运行时对 CSS 样式表主题(包括 SVG 资源和 SVG 图标)进行实时颜色切换的Qt项目。 项目预览: 项目地址 地址:Qt-Advanced-Stylesheets 本地编译环境 Win11 家庭中文版 Qt5.15.2 (MSVC2019) Qt Creator1…

golang 静态库 Undefined symbol: __mingw_vfprintf

正常用golang编译一个静态库给 其他语言 调用,编译时报错 Error: Undefined symbol: __mingw_vfprintf 很是奇怪,之前用用golang写静态库成功过,编译也没问题,结果却是截然不同。 试了很多次,发现唯一的差别就是在 …