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

news/2024/5/18 21:47:34 标签: 动态规划, 算法, 强化学习, 策略迭代

目录

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.niftyadmin.cn/n/100999.html

相关文章

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

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

kubernates-1.26.1 kubeadm containerd 单机部署

k8s1.26 kubeadm containerd 安装 kubeadm init 时提示 containerd 错误 failed to pull image “k8s.gcr.io/pause:3.6” 报错日志显示containerd pull时找不到对应的pause版本&#xff0c;而不是registry.k8s.io/pause:3.9 [rootk8s-master containerd]# kubeadm init --k…

《计算机视觉和图像处理简介 - 中英双语版》:神经网络中的激活函数 ReLU vs Sigmoid

文章大纲 Neural Network Module and Training Function创建数据集Define Neural Network, Criterion function, Optimizer and Train the ModelTest Sigmoid and ReluAnalyze Results参考文献与学习路径在本文中,我们在具有两个隐藏层的MNIST数据集上测试Sigmoid和Relu激活函…

SAP FICO期初开账存货导入尾差

一、问题 1.AFS物料网格级别库存导入先除再乘有尾差&#xff1a; 旧系统数据迁移自两个系统&#xff1a;一个管理数量账&#xff08;网格级别&#xff09;&#xff0c;一个管理金额账&#xff08;物料级别&#xff09; 2.MB52分工厂与MB5L分工厂统计差异&#xff1a; M…

2023淘宝天猫38节红包满减优惠活动时间是从几月几号什么时候开始?

2023年淘宝天猫38节活动将于2023年3月2日中午12点正式开始&#xff0c;活动将持续至2023年3月8日晚上23点59分。届时&#xff0c;淘宝天猫将推出一系列的优惠活动和红包福利&#xff0c;为广大女性用户送上节日的祝福和福利。在这个特别的节日里&#xff0c;淘宝天猫为女性用户…

C语言之习题练习集

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 文章目录牛客网题号&#xff1a; JZ17 打印从1到最大的n位数牛客网题号&#x…

【react】react创建项目与引入AntD组件库:

文章目录一、初始化项目&#xff1a;【1】创建项目【2】暴露项目配置文件【3】安装依赖【4】配置less二、快捷键&#xff1a;【1】rcctab三、安装AntD组件库&#xff1a;【1】安装【2】index.js【3】问题&#xff1a;【4】效果&#xff1a;一、初始化项目&#xff1a; 【1】创…

社畜大学生的Python之pandas学习笔记,保姆入门级教学

接上期&#xff0c;上篇介绍了 NumPy&#xff0c;本篇介绍 pandas。 目录 pandas 入门pandas 的数据结构介绍基本功能汇总和计算描述统计处理缺失数据层次化索引 pandas 入门 Pandas 是基于 Numpy 构建的&#xff0c;让以 NumPy 为中心的应用变的更加简单。 Pandas是基于Numpy…