深入理解强化学习——马尔可夫决策过程:贝尔曼期望方程-[举例与代码实现]

分类目录:《深入理解强化学习》总目录


在文章《深入理解强化学习——马尔可夫决策过程:贝尔曼期望方程-[基础知识]》中我们讲到了贝尔曼期望方程,本文就举一个贝尔曼期望方程的具体例子,并给出相应代码实现。

下图是一个马尔可夫决策过程的简单例子,其中每个深色圆圈代表一个状态,一共有 s 1 ∼ s 5 s_1\sim s_5 s1s5共5个状态。黑色实线箭头代表可以采取的动作,浅色小圆圈代表动作,需要注意的是,并非在每个状态都能采取所有动作,例如在状态 s 1 s_1 s1,智能体只能采取“保持 s 1 s_1 s1”和“前往 s 2 s_2 s2”这两个动作,无法采取其他动作。
马尔可夫决策过程的一个简单例子
每个浅色小圆圈旁的数字代表在某个状态下采取某个动作能获得的奖励。虚线箭头代表采取动作后可能转移到的状态,箭头边上的数字代表转移概率,如果没有数字则表示转移概率为1。例如,在 s 2 s_2 s2下, 如果采取动作“前往 s 3 s_3 s3”,就能得到奖励 − 2 -2 2,并且转移到 s 3 s_3 s3;在 s 4 s_4 s4下,如果采取“概率前往”,就能得到奖励 1 1 1,并且会分别以概率 0.2 , 0.4 , 0.4 0.2, 0.4, 0.4 0.2,0.4,0.4转移到 s 2 s_2 s2, s 3 s_3 s3 s 4 s_4 s4

下面我们编写代码来表示上图中的马尔可夫决策过程,并定义两个策略。第一个策略是一个完全随机策略,即在每个状态下,智能体会以同样的概率选取它可能采取的动作。例如,在 s 1 s_1 s1下,智能体会以 0.5 0.5 0.5 0.5 0.5 0.5的概率选取动作“保持 s 1 s_1 s1”和“前往 s 2 s_2 s2”。第二个策略是一个提前设定的一个策略:

S = ["s1", "s2", "s3", "s4", "s5"]  # 状态集合
A = ["保持s1", "前往s1", "前往s2", "前往s3", "前往s4", "前往s5", "概率前往"]  # 动作集合
# 状态转移函数
P = {"s1-保持s1-s1": 1.0,"s1-前往s2-s2": 1.0,"s2-前往s1-s1": 1.0,"s2-前往s3-s3": 1.0,"s3-前往s4-s4": 1.0,"s3-前往s5-s5": 1.0,"s4-前往s5-s5": 1.0,"s4-概率前往-s2": 0.2,"s4-概率前往-s3": 0.4,"s4-概率前往-s4": 0.4,
}
# 奖励函数
R = {"s1-保持s1": -1,"s1-前往s2": 0,"s2-前往s1": -1,"s2-前往s3": -2,"s3-前往s4": -2,"s3-前往s5": 0,"s4-前往s5": 10,"s4-概率前往": 1,
}
gamma = 0.5  # 折扣因子
MDP = (S, A, P, R, gamma)# 策略1,随机策略
Pi_1 = {"s1-保持s1": 0.5,"s1-前往s2": 0.5,"s2-前往s1": 0.5,"s2-前往s3": 0.5,"s3-前往s4": 0.5,"s3-前往s5": 0.5,"s4-前往s5": 0.5,"s4-概率前往": 0.5,
}
# 策略2
Pi_2 = {"s1-保持s1": 0.6,"s1-前往s2": 0.4,"s2-前往s1": 0.3,"s2-前往s3": 0.7,"s3-前往s4": 0.5,"s3-前往s5": 0.5,"s4-前往s5": 0.1,"s4-概率前往": 0.9,
}# 把输入的两个字符串通过“-”连接,便于使用上述定义的P、R变量
def join(str1, str2):return str1 + '-' + str2

接下来我们想要计算该马尔可夫决策过程下,一个策略 π \pi π的状态价值函数。我们现在有的工具是马尔可奖励过程的解析解方法。于是,一个很自然的想法是:给定一个马尔可夫决策过程和一个策略,我们是否可以将其转化为一个马尔可夫奖励过程?答案是肯定的。我们可以将策略的动作选择进行边缘化(Marginalization),就可以得到没有动作的马尔可夫奖励过程了。具体来说,对于某一个状态,我们根据策略所有动作的概率进行加权,得到的奖励和就可以认为是一个马尔可夫奖励过程在该状态下的奖励,即:
r ‘ ’ ( s ) = ∑ a ∈ A π ( a ∣ s ) r ( s , a ) r_‘’(s)=\sum_{a\in A}\pi(a|s)r(s, a) r(s)=aAπ(as)r(s,a)

同理,我们计算采取动作的概率与使 s s s转移到的 s ′ s' s概率的乘积,再将这些乘积相加,其和就是一个马尔可夫奖励过程的状态从转移至的概率:
P ′ ( s ′ ∣ s ) = ∑ s ∈ A π ( a ∣ s ) P ( s ′ ∣ s , a ) P'(s'|s)=\sum_{s\in A}\pi(a|s)P(s'|s, a) P(ss)=sAπ(as)P(ss,a)

于是,我们构建得到了一个马尔可夫奖励过程 ( S , P ′ , r ′ , γ ) (S, P', r', \gamma) (S,P,r,γ)。根据价值函数的定义可以发现,转化前的马尔可夫决策过程的状态价值函数和转化后的马尔可夫奖励过程的价值函数是一样的。于是我们可以用马尔可夫奖励过程中计算价值函数的解析解来计算这个马尔可夫决策过程中该策略的状态价值函数。

下面的代码计算用随机策略(也就是代码中的Pi_1)时的状态价值函数。为了简单起见,我们直接给出转化后的马尔可夫将来过程的状态转移矩阵和奖励函数:

gamma = 0.5
# 转化后的MRP的状态转移矩阵
P_from_mdp_to_mrp = [[0.5, 0.5, 0.0, 0.0, 0.0],[0.5, 0.0, 0.5, 0.0, 0.0],[0.0, 0.0, 0.0, 0.5, 0.5],[0.0, 0.1, 0.2, 0.2, 0.5],[0.0, 0.0, 0.0, 0.0, 1.0],
]
P_from_mdp_to_mrp = np.array(P_from_mdp_to_mrp)
R_from_mdp_to_mrp = [-0.5, -1.5, -1.0, 5.5, 0]V = compute(P_from_mdp_to_mrp, R_from_mdp_to_mrp, gamma, 5)
print("MDP中每个状态价值分别为\n", V)

输出:

MDP中每个状态价值分别为[[-1.22555411][-1.67666232][ 0.51890482][ 6.0756193 ][ 0.        ]]

知道了状态价值函数 V π ( s ) V_\pi(s) Vπ(s)后,我们可以根据以下公式计算得到动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a)。例如 ( s 4 , 概率前往 ) (s_4, \text{概率前往}) (s4,概率前往)的动作价值为 1 + 0.5 × [ 0.2 × ( − 1.68 ) + 0.4 × 0.52 + 0.4 × 6.08 ] = 2.152 1+0.5\times[0.2\times(-1.68)+0.4\times0.52+0.4\times6.08]=2.152 1+0.5×[0.2×(1.68)+0.4×0.52+0.4×6.08]=2.152
Q π ( s , a ) = r ( s , a ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s , a ) V π ( s ′ ) Q_\pi(s, a)=r(s, a)+\gamma\sum_{s'\in S}P(s'|s, a)V_\pi(s') Qπ(s,a)=r(s,a)+γsSP(ss,a)Vπ(s)

这个 MRP 解析解的方法在状态动作集合比较大的时候不是很适用,那有没有其他的方法呢?第 4 章将介绍用动态规划算法来计算得到价值函数。3.5 节将介绍用蒙特卡洛方法来近似估计这个价值函数,用蒙特卡洛方法的好处在于我们不需要知道 MDP 的状态转移函数和奖励函数,它可以得到一个近似值,并且采样数越多越准确。

参考文献:
[1] 张伟楠, 沈键, 俞勇. 动手学强化学习[M]. 人民邮电出版社, 2022.
[2] Richard S. Sutton, Andrew G. Barto. 强化学习(第2版)[M]. 电子工业出版社, 2019
[3] Maxim Lapan. 深度强化学习实践(原书第2版)[M]. 北京华章图文信息有限公司, 2021
[4] 王琦, 杨毅远, 江季. Easy RL:强化学习教程 [M]. 人民邮电出版社, 2022

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

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

相关文章

基于springboot实现私人健身与教练预约管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现私人健身与教练预约管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应…

深入理解虚拟 DOM:提升前端性能的关键技术

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

Vue 定义只读数据 readonly 与 shallowReadonly

readonly 让一个响应式数据变为 **深层次的只读数据**。 shallowReadonly 让一个响应式数据变为 **浅层次的只读数据**,只读第一层。 isReadonly 判断一个数据是不是只读数据。 应用场景:不希望数据被修改时使用。 readonly深层次只读: …

Java实现王者荣耀小游戏

主要功能 键盘W,A,S,D键:控制玩家上下左右移动。按钮一:控制英雄发射一个矩形攻击红方小兵。按钮二:控制英雄发射魅惑技能,伤害小兵并让小兵停止移动。技能三:攻击多个敌人并让小兵停止移动。普攻:对小兵造…

VsCode学习

一、在VsCode 上编写第一个C语言 在VsCode上写代码都是先打开文件夹,这样也方便管理代码和编译器产生的可执行程序,VsCode生成的配置文件等。 1.1打开文件夹 写代码前,首先创立一个文件夹存储以后我们写的VsCode代码,便于管理。…

代码随想录算法训练营 ---第四十九天

前言: 今天是买卖股票的最佳时机系列,本系列之前在学习贪心思想时做过一些。 第一题: 简介: 本题在读题时我们要注意到几个细节 1.本题股票买卖只有一次。2.我们要在最低点买股票,在最高点卖股票。 我的思路&#…

skywalking告警UI界面有告警信息,webhook接口没有回调,400错误

400错误就是回调接口返回数据的属性对应不上 PostMapping(“/webhook”) public void webhook(RequestBody List alarmMessageList) 自定义的实体类AlarmMessage有问题 只能去官网找了 告警实体类官网 Getter EqualsAndHashCode RequiredArgsConstructor NoArgsConstructor(fo…

父进程隐藏——ConsoleApplication903项目

首先我发现用calc来做进程隐藏实验是失败的,父进程一直都是svhost.exe 那么我用我自己生成的cs木马beacon903.exe试试 试试explorer.exe 再试试cmd.exe 可以看到成功变成cmd.exe 可以看到我们可以通过这种方式虚假父进程 以上我们是直接获得的pid,那…

【Kotlin】类与接口

文章目录 类的定义创建类的实例构造函数主构造函数次构造函数init语句块 数据类的定义数据类定义了componentN方法 继承AnyAny:非空类型的根类型Any?:所有类型的根类型 覆盖方法覆盖属性覆盖 抽象类接口:使用interface关键字函数:funUnit:让…

听GPT 讲Rust源代码--src/tools(2)

题图来自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一个 Rust 语言的语法分析器和语义分析器,用于提供代码补全、导航、重构等开发工具。而 rust-analyzer 的代码实现存储在 rust/src/tools/rust-analyzer 这个文件夹中…

亚马逊云科技 re:Invent 2023:引领科技前沿,探索未来云计算之窗

文章目录 一、前言二、什么是亚马逊云科技 re:Invent?三、亚马逊云科技 re:Invent 2023 将于何时何地举行四、亚马逊云科技 re:Invent 2023 有什么内容?4.1 亚马逊云科技 re:Invent 2023 主题演讲4.2 亚马逊云科技行业专家探实战 五、更多亚马逊云科技活…

Unity UGUI的自动布局-LayoutGroup(水平布局)组件

Horizontal Layout Group | Unity UI | 1.0.0 1. 什么是HorizontalLayoutGroup组件? HorizontalLayoutGroup是Unity UGUI中的一种布局组件,用于在水平方向上对子物体进行排列和布局。它可以根据一定的规则自动调整子物体的位置和大小,使它们…

万字详解,和你用RAG+LangChain实现chatpdf

像chatgpt这样的大语言模型(LLM)可以回答很多类型的问题,但是,如果只依赖LLM,它只知道训练过的内容,不知道你的私有数据:如公司内部没有联网的企业文档,或者在LLM训练完成后新产生的数据。(即使是最新的GPT-4 Turbo,训练的数据集也只更新到2023年4月)所以,如果我们…

141.【Git版本控制-本地仓库-远程仓库-IDEA开发工具全解版】

Git-深入挖掘 (一)、Git分布式版本控制工具1.目标2.概述(1).开发中的实际常见(2).版本控制器的方式(3).SVN (集中版本控制器)(4).Git (分布版本控制器)(5).Git工作流程图 (二)、Git安装与常用命令1.Git环境配置(1).安装Git的操作(2).Git的配置操作(3).为常用的指令配置别名 (可…

想成为网络安全工程师该如何学习?

一、网络安全应该怎么学? 1.计算机基础需要过关 这一步跟网安关系暂时不大,是进入it行业每个人都必须掌握的基础能力。 计算机网络计算机操作系统算法与数据架构数据库 Tips:不用非要钻研至非常精通,可以与学习其他课程同步进行。 2.渗透技…

.mat格式文件是什么?及将png,jpg,bmp,gif,tiff,psd等格式图片转为.mat格式(附代码)

很多深度学习网络的输入要求为.mat格式,当然也可以直接修改输入数据的代码,比如修改为使用OpenCV读取图片等,但有些网络修改起来比较麻烦,且.mat数据有很多优势,所以部分网络最好还是用默认的.mat格式数据 目录 一、.…

Gossip协议理解

概述 Gossip协议,又称epidemic协议,基于流行病传播方式的节点或进程之间信息交换的协议,在分布式系统中被广泛使用。 在1987年8月由施乐-帕洛阿尔托研究中心发表ACM上的论文《Epidemic Algorithms for Replicated Database Maintenance》中…

OpenStack云计算平台

目录 一、OpenStack 1、简介 2、硬件需求 3、网络 二、环境搭建 1、安全 2、主机网络 3、网络时间协议(NTP) 4、OpenStack包 5、SQL数据库 6、消息队列 7、Memcached 一、OpenStack 1、简介 官网:https://docs.openstack.org/2023.2/ OpenStack系统由…

RPA机器人如何解决非银企直联网银账户的数据自动采集?

数字时代来临,随着全球信息化水平的不断提升,企业们纷纷向自动化办公、数字化转型靠拢。财务部门作为一个企业的重要部门,承担着管理和监控公司所有项目的重要职责,因而一直被视为企业数字化转型的重要突破口。 由于企业经营理念和…

第二十章多线程

线程简介 java语言提供了并发机制,程序员可以在程序中执行多个线程,每一个线程完成一个功能,并与其他线程并发运行。 一个进程是一个包含有自身地址的程序,每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程…