深入理解强化学习——马尔可夫决策过程:策略迭代与价值迭代的区别

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


我们来看一个马尔可夫决策过程控制的动态演示,下图所示为网格世界的初始化界面:
初始化界面
首先我们来看看策略迭代,之前的例子在每个状态都采取固定的随机策略,每个状态都以0.25的概率往上、下、左、右,没有策略的改变。但是我们现在想进行策略迭代,每个状态的策略都进行改变。如图下图(a)所示,我们先执行一次策略评估,得到价值函数,每个状态都有一个价值函数。如下图(b)所示,我们接着进行策略改进,单击“策略更新(Policy Update)”,这时有些格子里面的策略已经产生变化。比如对于中间 − 1 −1 1的这个状态,它的最佳策略是往下走。当我们到达 − 1 −1 1状态后,我们应该往下走,这样就会得到最佳的价值。绿色右边的格子的策略也改变了,它现在选取的最佳策略是往左走,也就是在这个状态的时候,最佳策略应该是往左走。
尔可夫决策过程控制:<a class=策略迭代示例" />
如图下图(a)所示,我们再执行下一轮的策略评估,格子里面的值又被改变了。多次之后,格子里面的值会收敛。如图下图(b) 所示,我们再次执行策略更新,每个状态里面的值基本都改变了,它们不再上、下、左、右随机改变,而是会选取最佳的策略进行改变。
<a class=马尔可夫决策过程控制:策略迭代示例" />
如下图(a)所示,我们再次执行策略评估,格子的值又在不停地变化,变化之后又收敛了。如下图(b)所示,我们再执行一次策略更新。现在格子的值又会有变化,每一个状态中格子的最佳策略也会产生一些改变。
<a class=马尔可夫决策过程控制:策略迭代示例" />
如下图(a)所示,我们再执行一遍策略更新,格子的值没有发生变化,这说明整个马尔可夫决策过程已经收敛了。所以现在每个状态的值就是当前最佳的价值函数的值,当前状态对应的策略就是最佳的策略。通过这个例子,我们知道策略迭代可以把网格世界“解决掉”。“解决掉”是指,不管在哪个状态,我们都可以利用状态对应的最佳的策略到达可以获得最多奖励的状态。

如图下图(b)所示,我们再用价值迭代来解马尔可夫决策过程,单击“切换成价值迭代”。 当格子的值确定后,就会产生它的最佳状态,最佳状态提取的策略与策略迭代得出的最佳策略是一致的。在每个状态,我们使用最佳策略,就可以到达得到最多奖励的状态。
尔可夫决策过程控制:<a class=策略迭代示例" />
我们再来对比策略迭代价值迭代,这两个算法都可以解马尔可夫决策过程的控制问题。策略迭代分两步。首先进行策略评估,即对当前已经搜索到的策略函数进行估值。得到估值后,我们进行策略改进,即把Q函数算出来,进行进一步改进。不断重复这两步,直到策略收敛。价值迭代直接使用贝尔曼最优方程进行迭代,从而寻找最佳的价值函数。找到最佳价值函数后,我们再提取最佳策略。

参考文献:
[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.niftyadmin.cn/n/5271084.html

相关文章

svn 安装

安装系统 ubuntu 22 安装命令&#xff1a; sudo apt-get install subversion 创建第一个工程&#xff1a; 创建版本库、项目 1、先创建svn根目录文件夹 sudo mkdir /home/svn 2、创建项目的目录文件夹 sudo mkdir /home/svn/demo_0 svnadmin create /home/svn/demo_0 配置&a…

Linux_Docker图形化工具Portainer如何安装并结合内网穿透实现远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 本文主要介绍如何本地安装Portainer并结合内网穿透工具实现任意浏览器远程访问管理界面。Portainer 是一个轻量级…

linux应急响应基础和常用命令

linux应急响应 linux应急响应基础和常用命令基于linux系统本身进行应急响应。 系统基础信息获取 获取linux服务器基本信息 命令&#xff1a; uname -a内存cpu信息 cat /proc/cpuinfo cat /proc/meminfo lscpu free -m lsmod #查看载入的模块信息进程查看 动态进程查看 …

Pinocchio - 开源多刚体动力学 C++、Python库

系列文章目录 前言 Pinocchio 是一个用于动态计算的 C 库&#xff0c;侧重于机器人、计算机动画和生物力学应用。 它基于 Featherstone 在其著作中正式提出的动态多体计算。 该软件附带一个 python 封装和可视化工具。 一、库特征 实现了以下算法 递归牛顿-欧拉算法&#xf…

Linux---用户组相关操作

1. 创建用户组 命令说明groupadd创建(添加)用户组 创建用户组效果图: 2. 创建用户并指定用户组 创建用户并指定用户组效果图: 3. 修改用户组 修改用户组效果图: 4. 删除用户组 命令说明groupdel删除用户组 删除用户组效果图: 说明: 如果用户组下面有用户先删除用户在…

02.Git常用基本操作

一、基本配置 &#xff08;1&#xff09;打开Git Bash &#xff08;2&#xff09;配置姓名和邮箱 git config --global user.name "Your Name" git config --global user.email "Your email" 因为Git是分布式版本控制工具&#xff0c;所以每个用户都需要…

C#监听端口报错“以一种访问权限不允许的方式做了访问套接字的尝试”

C#编写的端口监听程序&#xff0c;平时都能正常运行&#xff0c;但最新操作系统更新补丁重启电脑后&#xff0c;运行程序报错“以一种访问权限不允许的方式做了访问套接字的尝试”&#xff0c;客户端程序也无法连接。   百度错误信息&#xff0c;给出的答案都是端口监听程序使…

55 代码审计-JAVA项目注入上传搜索或插件挖掘

目录 必备知识点演示案例:简易Demo段SQL注入及预编译IDEA审计插件FindBugs安装使用Fortify_SCA代码自动审计神器使用Ofcms后台SQL注入-全局搜索关键字Ofcms后台任意文件上传-功能点测试 涉及资源&#xff1a; 我们一般针对java项目&#xff0c;进行漏洞分析的话&#xff0c;主要…