RL笔记:动态规划(2): 策略迭代

news2024/9/23 13:16:41

目录

0. 前言

(4.3) 策略迭代

Example 4.2: Jack’s Car Rental

Exercise 4.4

Exercise 4.5

Exercise 4.6

Exercise 4.7


0. 前言

        Sutton-book第4章(动态规划)学习笔记。本文是关于其中4.2节(策略迭代)。

(4.3) 策略迭代

        基于上节(RL笔记:动态规划(1): 策略估计和策略提升)的策略提升,一旦从策略\pi出发找到了一个更好的策略\pi';很显然,我们可以进一步基于\pi'找到下一个更好的(\pi')'。重复这一过程,就可以得到不断改进的策略,直到收敛到最优策略。这一过程称为策略迭代(Policy Iteration),如下图所示:

 

        其中,“E”表示Evaluation,即上上节所述的策略评估;“I”表示Improvement,即上节所述的策略提升。由于每一步都必然可以得到一个更好的策略(除非已经到达最优策略,如上节所述),因此这一迭代过程最终必然收敛于最优策略(类似于数学分析中的单调有界序列必定收敛的命题)。

        每一轮(each iteration)的策略评估是以是上一轮结束后得到的策略(policy)的值函数(value function)为初始值的。策略迭代的算法流程如下所示:

 

图1 基于状态值函数的策略迭代 

 

Some points and tips

  1. 这个两步策略是不是有点类似于机器学习中的EM(Expectation-Maximization算法)的套路?
  2. 第2步的策略评估中并没有像4.1节中的策略评估那样对动作进行求和:\sum\limits_a \pi(a|s)。​这是因为在这个迭代算法中第3步的策略提升采用的是贪婪算法,总是采取动作值函数最大的动作,所得到的策略是确定性策略(deterministic policy),每个状态与动作是一一对应的,所以由于​ \sum\limits_a \pi(a|s) = \pi(a_{max}|s)=1,可以进行简化。
  3. 第2步的策略评估中同时计算前后两轮迭代的各对应状态的值函数的变化量并得到变化量绝对值的最大值Δ,这个是用于收敛判断以及early-stop。如果​满足条件 \Delta < \theta ,即判定近似收敛并退出迭代过程

        策略评估时根据当前策略\pi选择动作,策略提升时根据基于策略\pi计算所得的值函数并基于\max\limits_a Q(s,a)准则选择动作。除非当前策略\pi已经是最优策略,否则必然得到比当前策略\pi更好的策略。所以这一迭代过程最终必定“近似地”收敛于最优策略(近似是由于采用了early-stop控制)。

Example 4.2: Jack’s Car Rental

Jack负责管理一个全国性租车公司的两个站点。有顾客来租车时,如果有车可租则将车租出并收入10美元(是指每天10美元吗?还是说每借一次就是10美元不论天数?);如果无车可租则失去一笔生意。车归还后的次日车子可以重新出租。为了尽量确保两个站点都有车可租,Jack会在晚上在两个站点之间移动车辆,每辆车移动耗费2美元。每个站点每天来租车和来还车的人数均服从泊松分布:Prob(n) = \frac{\lambda^n}{n!} e^{-\lambda}, \lambda为数学期望。假定站点1的租车人数和还车人数的数学期望分别为3和4,站点2的租车人数和还车人数的数学期望分别为3和2。为了简化问题,进一步假定每个站点车辆不能超过20辆,超过这个数量的车被归还给租车公司。每个晚上可以在两个租车点移动的车最多5辆。考虑折扣系数\gamma = 0.9,并且作为一个continuing finite MDP问题处理:以每天作为一个time step; 状态代表每天结束时留在各站点的存车数。

状态用state = {num1: 站点1保有车数;num2: 站点2保有车数},这个保有车数是指每天最终(在两个站点挪动车之后)各站点保有车数。每天车的数量变化取决于以下因素:

  1. 当天借出车数:遵循泊松分布,以及当前站点存车状况
  2. 当天还入车数:遵循泊松分布,以及当前站点存车状况
  3. 当晚挪出或者挪入车数:是取决于agent(本问题中就是指Jack)基于policy所采取的行动

代码实现例可以参考:

https://github.com/ShangtongZhang/reinforcement-learning-an-introduction/chapter04/car_rental.py

其中expected_returns()函数实现的就是

这个例子中有一个明显的不太合理的地方,就是一辆车借出后的租金固定为10美元,与租用天数无关。这样可能是为了方便问题简化处理吧。如果修改为一辆车借出去每天租金10美元的话,情况会怎么样呢?

 

Exercise 4.4

前面所示的策略迭代算法有一个细微的bug。当存在两个或多个同样好的策略(所谓同样好是指啥?),它会导致在这些同样好的策略之间来回切换因而永远停不下来。请修改以上伪代码使得能够确保在有限次迭代后收敛和退出。

【ans】

在第3步中有一个收敛判决:if old_action 不等于 \pi(s)...

如果在当前策略\pi中,在状态s时有多个动作同样好(equally good),此时\pi(s)不是一个值,而是包含多个元素的集合,以上判决处理将会导致问题。有两种解决方案:

其一:将以上收敛判决改为if \ old\_action \notin \pi(s):...

其二:追加tie-breaking rule between equally good actions,使得在存在多个同样好的动作时,策略\pi(s)总能产生唯一确定性的动作

 

 

Exercise 4.5

试给出与以上面向状态值函数的策略迭代算法类似的面向动作值函数的策略迭代算法。

 

图2 基于动作值函数的策略迭代

以上解答摘自LyWangPX/Reinforcement-Learning-2nd-Edition-by-Sutton-Exercise-Solutions(github.com)

         变更点仅仅是第2步的策略评估中将基于“状态值函数的贝尔曼方程”的迭代更新改为基于“动作值函数的贝尔曼方程”的迭代更新。进一步由于第3步中是基于贪婪方法进行策略提升,所得的是确定性的策略,因此Q(s,a)的更新方程可以进一步简化(理由同上面关于基于状态值函数的策略迭代的解说)为(去掉对a’的求和):

        Q(s,a) \leftarrow \sum\limits_{s',r}p(s',r|s,a)[r + \gamma Q(s',\pi(s'))]

        第3步中\pi(s)的更新看似写法不同,其实没有本质变化。因为(之所以成立仍然是因为贪婪决策):

        Q(s,a) = \sum\limits_{s',r}p(s',r|s,a)[r + \gamma Q(s',\pi(s'))] = \sum\limits_{s',r}p(s',r|s,a)[r + \gamma V(s')]

,前面的基于状态值函数的策略迭代流程中其实本质上也是基于动作值函数的贪婪决策。

 

Exercise 4.6

假定只能考虑软策略(soft policy),即在每个状态下选择各个动作的概率不得低于\frac{\epsilon}{\mathcal{A}(s)}. 试修改上述的策略迭代算法以对应这种要求。

【Ans】

相比图1所示基于硬策略(hard policy, i.e, greedy policy)原始的策略迭代流程,需要做以下两点修改:

  1. 在策略评估(policy evaluation)中,由于软策略中每个状态下对应的动作不是唯一的,对状态值函数的估计需要对动作进行求和,即恢复为标准的状态值贝尔曼方程
  2. 在策略提升(policy improvement)中,要将更新后的策略修改为软策略,即:取导致动作价值最大的动作作为软策略的greedy-action,其余则作为epsilon-action。然后,同样是基于greedy-action进行收敛判决。

Exercise 4.7

请编写策略迭代程序解决Jack’s car rental problem,问题条件有一些变化:

  1. Jack的在站点1的一个员工住在站点2附近,每晚她可以免费驾驶移动一辆车到站点2。其余的车的移动仍然是每辆2美元
  2. 每个站点的停车位置有限,晚上存车超过10辆车(在两个站点间车辆移动后)需要额外支付4美元(不论超过多少辆)停车费

在真实问题中这类非线性条件以及任意转移函数(arbitrary dynamics)很常见,通常使用动态规划以外的优化方法很难求解。建议首先复现Example4.2中的结果。

......coming......

强化学习笔记:强化学习笔记总目录

        

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

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

相关文章

【JavaWeb】复习重点内容

✅✅作者主页&#xff1a;&#x1f517;孙不坚1208的博客 &#x1f525;&#x1f525;精选专栏&#xff1a;&#x1f517;JavaWeb从入门到精通&#xff08;持续更新中&#xff09; &#x1f4cb;&#x1f4cb; 本文摘要&#xff1a;本篇文章主要分享JavaWeb的学习重点内容。 &a…

C++11多线程编程 二:多线程通信,同步,锁

C11多线程编程 一&#xff1a;多线程概述 C11多线程编程 二&#xff1a;多线程通信&#xff0c;同步&#xff0c;锁 C11多线程编程 三&#xff1a;锁资源管理和条件变量 2.1 多线程的状态及其切换流程分析 线程状态说明&#xff1a; 初始化&#xff08;Init&#xff09;&am…

javaEE 初阶 — 网络层中 IP 协议 的报文结构

文章目录IP 协议报文4位版本号4位首部长度8位服务类型16位总长度&#xff08;字节数&#xff09;8位生存时间&#xff08;TTL&#xff09;与 8位协议16位首部校验和32位源 IP 地址与32位目标 IP 地址动态分配的 IP 地址NAT 网络地址转换IPv6IP 协议报文 4位版本号 这里的 IP 协…

图表示学习+对比学习入门必看:DGI

来源&#xff1a;投稿 作者&#xff1a;kon 编辑&#xff1a;学姐 前言 众所周知&#xff0c;火热的对比学习不仅在CV取得了很多成果&#xff0c;也在NLP、推荐等领域大放异彩。自然的&#xff0c;有人将对比学习引入了图表示学习领域&#xff0c;利用图本身的结构与结点自身的…

14.微服务SpringCloud

一、基本概念 Spring Cloud 被称为构建分布式微服务系统的“全家桶”&#xff0c;它并不是某一门技术&#xff0c;而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来&#xff0c;并通过 Spring Boot 的思想进行再封装&#xff0c;屏蔽…

【Servlet篇】Response对象详细解读

文章目录Response 继承体系Response 设置响应数据设置响应行数据设置响应头数据设置响应体数据Response 重定向Response 响应字符数据Response 响应字节数据Response 继承体系 前面说到&#xff0c;我们使用 Request 对象来获取请求数据&#xff0c;使用 Response 对象来设置响…

Pyinstaller 打包EXE(七) 百篇文章学PyQT

本文章是百篇文章学PyQT6的第七篇&#xff0c;本文讲述如何使用Pyinstaller打包UI界面和代码&#xff0c;将程序打包成EXE来更为方便的进行部署&#xff0c;在写博客和学习的过程中会遇到很多问题&#xff0c;例如&#xff1a;PyQT6在网上很多博客都是PyQT5、或者PyQT4大部分都…

Could not extract response: no suitable HttpMessageConverter

版本&#xff1a;spring-cloud-openfeign-core-2.1.1.RELEASE.jar&#xff0c;spring-webmvc-5.1.14.RELEASE.jar&#xff0c;jetty-server-9.4.41.v20210516.jar&#xff0c;tomcat-embed-core-9.0.48.jar 问题背景 生产服务请求下游服务时偶发抛出下面的异常&#xff0c;下…

git入门

目录 1. git简介 1.1 git是什么 1.2 git与svn的区别 2. github 2.1 创建仓库 2.2 删除仓库 2.3 新建文件及文件夹 3. git的基本操作 3.1 配置账户及邮箱 3.2 git文件状态与工作区域 3.3 常用命令 3.4 克隆&#xff08;clone&#xff09; 3.5 查看git仓库的状态 3.…

[音视频] BMP 图片格式分析

BMP 格式是什么 BMP&#xff08;Bitmap&#xff09;是一种常见的无损位图图像文件格式&#xff0c;是Windows操作系统中最早使用的图像格式之一&#xff0c;也是目前很多应用程序所使用的标准图像格式之一。 整体结构图&#xff0c;如下图所示 格式 BMP文件格式有多个版本&a…

QT中级(5)多线程读取一个文件,并在另一个文件夹中合成这个文件(1)

1 先实现一个简单程序 1.1 功能 用户可以输入一个源文件的路径和目标路径点击开始&#xff0c;程序启动读取和合成合成进度可见、合成步骤可见 1.2 思路 一个线程顺序读取文件&#xff0c;达到设定的缓存块就发给另一个合成线程&#xff0c;主线程用来进行数据传递、显示进…

电子技术——A类输出阶

电子技术——A类输出阶 因为射极跟随器具有较低的输出阻抗&#xff0c;射极跟随器是A类输出阶的典型代表。我们之前已经学习过射极跟随器的小信号模型&#xff0c;本节我们讨论其大信号模型。 传输特性 下图展示了一个射极跟随器的原理图&#xff1a; 其中 Q1Q_1Q1​ 为射极…

并发编程-学习总结(下)

目录 1、Future 1.1、Callable和Runnable的不同 1.2、Future的主要功能 1.3、常用方法 1.4、Future使用注意事项 1.5、CompletableFuture(旅游平台问题) 1.5.1、需求 1.5.2、解决方案1&#xff1a;串行 1.5.3、解决方案2&#xff1a;线程池 1.5.4、解决方案3&#xf…

Prometheus本地存储和VictoriaMetrics远端存储

文章目录Prometheus本地存储简介blockWAL本地存储配置参数VictoriaMetrics简介单机版部署使用安装VictoriaMetrics配置Prometheus使用Victoriametrics配置Grafana以Victoriametrics作为数据源集群版部署使用部署vmstorage部署vmselect部署vminsert配置Prometheus使用vminsert配…

LearnOpenGL-入门-你好,三角形

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网&#xff1a;https://learnopengl-cn.github.io/ 文章目录图形渲染管线基本介绍着色器…

文献计量三大定律之一---洛特卡定律及普赖斯定律

科学生产率是洛特卡定律的基础&#xff0c;科学生产率”(Scientific Productivity)&#xff09;是指科学家&#xff08;科研人员&#xff09;在科学上所表现出的能力和工作效率&#xff0c;通常用其生产的科学文献的数量来衡量。 1926年&#xff0c;洛特卡在一篇论文中提出了科…

Windows作为操作系统的典型特征和主要功能

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。我们每天都在用Windows操作系统&#xff0c;但是其实我们每天直接在打交道的并不是Windows操作系统的内核&#xff0c;而是Windows操作系统的…

Docker部署Springboot项目(含MySQL+Redis)

使用Docker部署之前写的一个博客项目&#xff0c;主要用到了MySQL和Redis&#xff0c;Redis作网站访问量统计。下面会对具体的部署方式作详细讲解 一、服务器安装Docker 1、删除docker旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \…

(三十五)大白话MySQL一个事务多次查询一条数据读到的都是不同的值,这就是不可重复读?

上一讲我们说完了多个事务并发执行时候&#xff0c;对MySQL的缓存页里的同一行数据同时进行更新或者查询的时候&#xff0c;可能发生的脏写和脏读的问题 我们也都理解了&#xff0c;之所以会发生脏写和脏读&#xff0c;最关键的&#xff0c;其实是因为你一个事务写或者查的是人…

黑盒测试的常用方法

这里我们先设置一个示例,后面的文章中会根据示例来进行讲解 假设有一个程序是判断一个整形数字是否属于1-100 目录 1.等价类法 2.边界值法 3.判定表法 4.场景设计法 5.错误猜测法 6.正交法 1.等价类法 概念:系统性的确定要输入的测试条件的方法可以看出概念非常抽象,那…