本笔记摘自知乎博主旺财的搬砖历险记和叶强,仅用于自学
1.动态规划介绍
(1)定义
Dynamic: sequential or temporal component to the problem.
Programming:optimising a “problem”
动态:该问题的时间或序列部分
规划:优化一个策略,与线性规划不同
🎀动态规划
- 是解决复杂问题的一个方法
- 把复杂问题分解问子问题
- 求解子问题
- 通过整合子问题的解得到整个问题的解
- 子问题的结果通常被存储从而解决后续复杂问题
(2)求解问题范围
不是所有的问题都能用动态规划方法来求解,能用动态规划求解的问题必须满足两个性质:
- 最优子结构(Optimal substructure)
- 保证问题能够使用最优性原理
- 问题的最优解可以分解为子问题的最优解
- 重叠子问题(Overlapping subproblems)
- 子问题重复多次
- 可以缓存并重用子问题的解
多阶段决策过程的最优决策序列具有这样的性质:
不管初始状态和初始决策如何,对于前面决策所造成的某一状态而言,其后各阶段的决策序列必须构成最优策略
💡MDP满足最优子结构和重叠子问题:
- 贝尔曼方程是递归的形式,把问题递归为求解子问题
- 值函数相当于存储了子问题的解,可以重用
(3)MDP
🏆规划:
- 用动态规划算法,在了解整个MDP的基础上,求解最优策略。即,在清楚模型结构(状态行为空间、转换矩阵、奖励等)的基础上,用规划来进行预测和控制。
1)预测
⭐输入:给定一个MDP ⟨ S , A , P , R , γ ⟩ \langle{\mathcal{S}},\mathcal{A},\mathcal{P}, {\mathcal{R}},{\mathcal{\gamma}}\rangle ⟨S,A,P,R,γ⟩和策略 π \pi π,或者给定一个MRP ⟨ S , P π , R π , γ ⟩ \langle{\mathcal{S}},\mathcal{P}^\pi, {\mathcal{R}}^\pi,{\mathcal{\gamma}}\rangle ⟨S,Pπ,Rπ,γ⟩
⭐输出:基于当前策略的值函数 v π v_\pi vπ
2)控制
⭐输入:给定一个MDP ⟨ S , A , P , R , γ ⟩ \langle{\mathcal{S}},\mathcal{A},\mathcal{P}, {\mathcal{R}},{\mathcal{\gamma}}\rangle ⟨S,A,P,R,γ⟩
⭐输出:最优价值函数 v ∗ v_* v∗和最优策略 π ∗ \pi_* π∗
(5)DP解决其他问题
(Richard Bellman在1957年出版作品《Dynamic Programming》)
- 调度算法 Scheduling algorithms
- 字符串算法 String algorithms (eg. sequence alignment)
- 图算法 Graph algorithms(eg. shortest path algorithms)
- 图形模型 Graphical models(eg. Viterbi algorithm)
- 生物信息学 Bioinformatics(eg. lattice models)
2.策略评估
(1)迭代策略评估
❓问题:评估一个给定的策略,也就是解决“预测”问题
- 给定一个策略 π \pi π,求对应的值函数 v π ( s ) v_\pi(s) vπ(s)或 q π ( s , a ) q_\pi(s,a) qπ(s,a)
✏解决:
- 直接解: v π = ( 1 − γ P π ) − 1 R π v_\pi=(1-\gamma \mathcal{P^{\pi}})^{-1}\mathcal{R}^{\pi} vπ=(1−γPπ)−1Rπ,可以求得精确解,但是复杂度 O ( n 3 ) \mathcal{O}(n^3) O(n3)
- 迭代解:应用Bellman期望方程,反向迭代✅ v π ( s ) = E [ R t + 1 + γ v π ( S t + 1 ) ∣ S t = s ] v_\pi(s)=\mathbb{E}[R_{t+1}+\gamma v_\pi(S_{t+1})\vert S_t=s] vπ(s)=E[Rt+1+γvπ(St+1)∣St=s], v 1 → v 2 → … v π v_1\rightarrow v_2\rightarrow \ldots v_\pi v1→v2→…vπ
💡方法:
-
同步反向迭代(synchronous backups)
- 在每次迭代过程中,对于第 k + 1 k+1 k+1次迭代,所有的状态 s ∈ S s\in\mathcal{S} s∈S的价值用 v k ( s ′ ) v_k(s^\prime) vk(s′)计算,并以 v k ( s ′ ) v_k(s^\prime) vk(s′)更新该状态在第 k + 1 k+1 k+1次迭代中的价值 v k + 1 ( s ) v_{k+1}(s) vk+1(s)( s ′ s^\prime s′是 s s s的后继状态)
- 解释
- synchronous:同步,指每次更新都要更新完所有的状态
- backup:备份,即 v k + 1 ( s ) v_{k+1}(s) vk+1(s)需要用到 v k ( s ′ ) v_k(s^\prime) vk(s′),以 v k ( s ′ ) v_k(s^\prime) vk(s′)更新 v k + 1 ( s ) v_{k+1}(s) vk+1(s)的过程称为备份,更新状态 s s s的值函数称为备份状态 s s s
- 公式
- 一次迭代内,状态 s s s的价值等于前次迭代里该状态的即时奖励➕所有可能的下一个状态 s ′ s^\prime s′的价值与其概率的乘积
- 一次迭代内,状态 s s s的价值等于前次迭代里该状态的即时奖励➕所有可能的下一个状态 s ′ s^\prime s′的价值与其概率的乘积
-
异步反向迭代(asynchronous backups)
- 在第 k k k次迭代时使用当此迭代的状态价值来更新状态价值
(2)举例:方格世界
- 已知条件
- 状态空间 S S S: S 1 − S 14 S1-S14 S1−S14为非终止状态, S T ST ST为终止状态。
- 动作空间 A A A:东南西北四个方向。
- 转移概率 P P P:动不了就停在原地,其余按照动作方向运动。
- 即时奖励 R R R:进入非终止状态的即时奖励为-1,进入终止状态即时奖励为0。
- 衰减系数 γ \gamma γ:1。
- 当前策略 π \pi π:随机策略,各动作的概率均为25%
- 问题
- 评估在这个方格世界里给定的策略。即,求解该方格世界在给定策略下的状态价值函数,求每一个状态的价值。
- 迭代法求解
迭代次数 | 注释 | |
---|---|---|
k=0 | 根据当前的状态价值,无法得出比随机策略更好的策略 | |
k=1 | 向上到边界,位置不变,且v(s’)仍用k=0时的价值 v π ( s ) = ∑ a ∈ A π ( a ∣ s ) ( R s a + γ ∑ s ∈ S ′ P S S ′ a v π ( s ′ ) ) v_\pi(s)=\sum_{a\in\mathcal{A}}\pi(a\vert s)(\mathcal{R}_s^a+\gamma \sum_{s\in S^{\prime}}\mathcal{P}_{SS^{\prime}}^av_\pi(s^{\prime})) vπ(s)=∑a∈Aπ(a∣s)(Rsa+γ∑s∈S′PSS′avπ(s′)) (1,2)处的 − 1 = ↑ 0.25 ( − 1 + 1 ∗ ( 1 ∗ 0 ) ) + → 0.25 ( − 1 + 1 ∗ ( 1 ∗ 0 ) ) + ↓ 0.25 ( − 1 + 1 ∗ ( 1 ∗ 0 ) ) + ← 0.25 ( − 1 + 1 ∗ ( 1 ∗ 0 ) ) -1=\uparrow 0.25(-1+1*(1*0))+ \rightarrow 0.25(-1+1*(1*0))+ \downarrow 0.25(-1+1*(1*0))+\leftarrow 0.25(-1+1*(1*0)) −1=↑0.25(−1+1∗(1∗0))+→0.25(−1+1∗(1∗0))+↓0.25(−1+1∗(1∗0))+←0.25(−1+1∗(1∗0)) |
|
k=2 | 目前未得到最优策略 (1,2)处的 − 1.7 = ↑ 0.25 ( − 1 + 1 ∗ ( 1 ∗ − 1 ) ) + → 0.25 ( − 1 + 1 ∗ ( 1 ∗ − 1 ) ) + ↓ 0.25 ( − 1 + 1 ∗ ( 1 ∗ − 1 ) ) + ← 0.25 ( − 1 + 1 ∗ ( 1 ∗ 0 ) ) -1.7=\uparrow 0.25(-1+1*(1*-1))+ \rightarrow 0.25(-1+1*(1*-1))+ \downarrow 0.25(-1+1*(1*-1))+\leftarrow 0.25(-1+1*(1*0)) −1.7=↑0.25(−1+1∗(1∗−1))+→0.25(−1+ |