Ⅲ Dynamic Programming
Dictum:
A man who is willing to be a slave, who does not know the power of freedom. -- Beck
动态规划(Dynamic Programming, DP)是基于模型的方法,即在给定一个利用MDP描述的完备的环境模型下可以计算出最优策略的优化算法。
DP的两种性质:1.最优子结构:问题的最优解法可以被分为若干个子问题;2.重叠子问题:子问题之间存在递归关系,解法是可以被重复利用的。在强化学习中,MDP满足两个性质,DP的关键思想就是利用价值函数组织并结构化对好的策略的搜索。
策略评估
策略评估(Policy Evaluation)也被称为“预测问题”,就是计算任意一个随机策略\(\pi\)的状态价值函数\(v_\pi\)的问题。
在MDP中,由公式\((2.11)\)最终得到了状态价值函数的贝尔曼方程:\(v_ \pi(s)=\displaystyle \sum_a\pi(a|s) \sum_{s^\prime.r} p(s^\prime,r|s,a) [r+\gamma v_\pi(s^\prime)]\),该方程可以通过迭代法求解,方法如下:
- 将状态价值函数序列记为\(\left\{ v_0,v_1,...,v_k\right\}\)
- \(v_0\)作为初始状态价值函数,任意取值(在终止状态时,取值必须为0)
- 通过下面的公式进行迭代$$v_{k+1}=\displaystyle \sum_a\pi(a|s) \sum_{s^\prime.r} p(s^\prime,r|s,a) [r+\gamma v_k(s^\prime)] \tag{3.1}$$
序列\(\left\{v_k\right\}\)在\(k \rightarrow \infty\)时将收敛于\(v_\pi\)。该方法需要两个数组:一个用于存储旧的\(v_k(s)\),另一个用于存储新的\(v_{k+1}(s)\)。也可以每次直接用新状态价值函数替换旧状态价值函数,这就是"in-place"更新。
价值迭代
上述的策略评估方法是一个多次遍历状态集合的迭代过程,因此,可以通过价值迭代(Value Iteration)来缩短策略评估的步骤,公式如下:
v_{k+1}(s)
& \doteq \max_a \mathbb{E}[R_{t+1}+ \gamma v_k(S_{t+1}|S_t=s,A_t=a)] \\
&=\max_a \displaystyle \sum_{s^\prime,r}p(s^\prime,r|s,a)[r+\gamma v_k(s^\prime)]
\end{aligned} \tag{3.2}
\]
通过公式\((3.2)\)可以在一次遍历后立即停止策略评估,只需要对每个状态更新一次,从而提升计算效率。
策略改进
通过策略评估得出策略的状态价值函数,可以根据策略改进定理(policy improvement theorem)选择出贪心策略:
对于任意两个确定策略\(\pi\)和\(\pi^\prime\),\(\forall s \in \mathcal{S},q_\pi(s,\pi^\prime(s)) \geq v_\pi(s)\),则策略\(\pi^\prime\)不劣于\(\pi\)。
在这种情况下,\(v_{\pi^\prime}(s) \geq v_\pi(s)\)。证明过程如下
v_{\pi}(s)
& \leq q_{\pi}\left(s, \pi^{\prime}(s)\right) \\
&=\mathbb{E}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s, A_{t}=\pi^{\prime}(a)\right] \\
&=\mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s\right] \\
& \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma q_{\pi}\left(S_{t+1}, \pi^{\prime}\left(S_{t+1}\right)\right) | S_{t}=s\right] \\
&=\mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma \mathbb{E}_{\pi^{\prime}}\left[R_{t+2}+\gamma v_{\pi}\left(S_{t+2}\right)\right] | S_{t}=s\right] \\
&=\mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} v_{\pi}\left(S_{t+2}\right) | S_{t}=s\right] \\
& \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\gamma^{3} v_{\pi}\left(S_{t+3}\right) | S_{t}=s\right] \\
& \qquad \vdots \\
& \leq \mathbb{E}_{\pi^{\prime}}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\gamma^{3} R_{t+4}+\cdots | S_{t}=s\right] \\
&=v_{\pi^{\prime}}(s)
\end{aligned} \tag{3.3}
\]
由此,可以推出贪心策略\(\pi^\prime\),满足
\pi^{\prime}(s)
& \doteq \underset{a}{\arg \max } q_{\pi}(s, a) \\
&=\underset{a}{\operatorname{argmax}} \mathbb{E}\left[R_{t+1}+\gamma v_{\pi}\left(S_{t+1}\right) | S_{t}=s, A_{t}=a\right] \\
&=\underset{a}{\operatorname{argmax}} \sum_{s^{\prime}, r} p\left(s^{\prime}, r | s, a\right)\left[r+\gamma v_{\pi}\left(s^{\prime}\right)\right]
\end{aligned} \tag{3.4}
\]
同时,可以写出它的状态价值函数:
v_{\pi^{\prime}}(s)
&=\max _{a} \mathbb{E}\left[R_{t+1}+\gamma v_{\pi^{\prime}}\left(S_{t+1}\right) | S_{t}=s, A_{t}=a\right] \\
&=\max _{a} \sum_{s^{\prime}, r} p\left(s^{\prime}, r | s, a\right)\left[r+\gamma v_{\pi^{\prime}}\left(s^{\prime}\right)\right] \\
&=v_*(s)
\end{aligned} \tag{3.5}
\]
策略迭代
通过下面的链式方法,可以得到一个不断改进的策略和状态价值函数的序列:
\]
\(\stackrel{E}{\longrightarrow}\)表示策略评估,\(\stackrel{I}{\longrightarrow}\)表示策略改进,每一次的策略评估都是一个迭代计算的过程,需要基于前一个策略的状态价值函数开始计算。
由上图可知,策略迭代(Policy Iteration)是通过策略评估和策略改进不断交互,使策略和状态价值函数最终收敛为最优。
异步动态规划
上述的都是同步动态规划(Synchronous Dynamic Programming),它们的缺点是需要对MDP的整个状态集进行遍历。异步动态规划(Asynchronous Dynamic Programming)使使用任意可用的状态值,以任意规则进行更新,为了确保能够正确收敛,异步动态规划必须不断更新所有状态的值。
References
Richard S. Sutton and Andrew G. Barto. Reinforcement Learning: An Introduction (Second Edition). 2018.
Csaba Szepesvári. Algorithms for Reinforcement Learning. 2009.
Course: UCL Reinforcement Learning Course (by David Silver)
Ⅲ Dynamic Programming的更多相关文章
- 动态规划 Dynamic Programming
March 26, 2013 作者:Hawstein 出处:http://hawstein.com/posts/dp-novice-to-advanced.html 声明:本文采用以下协议进行授权: ...
- Dynamic Programming
We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...
- HDU 4223 Dynamic Programming?(最小连续子序列和的绝对值O(NlogN))
传送门 Description Dynamic Programming, short for DP, is the favorite of iSea. It is a method for solvi ...
- hdu 4223 Dynamic Programming?
Dynamic Programming? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- 算法导论学习-Dynamic Programming
转载自:http://blog.csdn.net/speedme/article/details/24231197 1. 什么是动态规划 ------------------------------- ...
- Dynamic Programming: From novice to advanced
作者:Dumitru 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg An impo ...
- HDU-4972 A simple dynamic programming problem
http://acm.hdu.edu.cn/showproblem.php?pid=4972 ++和+1还是有区别的,不可大意. A simple dynamic programming proble ...
- [算法]动态规划(Dynamic programming)
转载请注明原创:http://www.cnblogs.com/StartoverX/p/4603173.html Dynamic Programming的Programming指的不是程序而是一种表格 ...
- hdu 4972 A simple dynamic programming problem(高效)
pid=4972" target="_blank" style="">题目链接:hdu 4972 A simple dynamic progra ...
- Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical
http://julialang.org/ julia | source | downloads | docs | blog | community | teaching | publications ...
随机推荐
- kolla部署openstack多节点高可用并对接ceph后端存储(17)
部署节点执行: 安装基础包和docker yum install python-devel libffi-devel gcc openssl-devel git python-pip -y 升级一下 ...
- cnblog维护
title: 博客归纳 blog: CSDN data: Java学习路线及视频 2019 12/31 时间管理 2020 1/22 Git是什么? 1/23 Git安装--Windows 3/24 ...
- EAM在不同行业的应用
EAM在不同行业的应用 EAM从出现至今,已让很多资产密集型企业受益,甚至在一些行业领域里已经是公认的.不可或缺的管理方案,比如电力行业.轨道交通行业等.但由于不同行业或者企业业务类型不同,导致了资产 ...
- elasticsearch备份和还原(基于hdfs)
备份和还原,为什么elasticsearch还需要备份呢,明明可以设置副本做到高可用,那怕啥呢? 其实在实际的生产环境中,一般最终的结果数据都是要备份的,这样的做的目的,就是能够以最快的速度还原数据, ...
- 【转】Locust 性能测试-小案例(1)-环境搭建
说在前面的话:从这节课开始,将讲解Locust作为一款测试工具,要怎么去应用.首先是"小案例"的系列文章,主要是给大家讲解locustfile也就是场景模拟的一些模式和方法.等到& ...
- 单调队列优化O(N)建BST P1377 [TJOI2011]树的序
洛谷 P1377 [TJOI2011]树的序 (单调队列优化建BST 链接 题意分析 本题思路很简单,根据题意,我们利用所给的Bst生成序将Bst建立起来,然后输出该BST的先序遍历即可: 但,如果我 ...
- Linux软件管理常用命令和选项
rpm /var/lib/rpm:数据库目录 -ivh x:安装软件包x -Uvh x:升级或安装软件包x,如果没有安装x的旧版本,则安装x,否则删除x的旧版本后再安装x. -Fvh x:升级软件包x ...
- C语言中time_t数据类型详细介绍
包含文件:<time.h> #ifndef __TIME_T #define __TIME_T /* 避免重复定义 time_t */ typedef long time_ ...
- Python装饰器实现带参数和不带参数
1 def log(text=None): 2 3 if isinstance(text, str): 4 def decorator(func): 5 @functools.wraps(func) ...
- nginx完美支持thinkphp3.2.2(需配置URL_MODE=>3 rewrite兼容模式)
来源:http://www.thinkphp.cn/topic/26637.html 环境:nginx 1.6,thinkphp3.2.2 第一步,修改server块 server { listen ...