DeepMind 的马尔可夫决策过程(MDP)课堂笔记

DeepMind Teaching by David Silver

视频课程链接(Youtube资源,需梯子):https://youtu.be/lfHX2hHRMVQ

文章目录

    • DeepMind Teaching by David Silver
      • 1. 马尔可夫过程(Markov Processes)
      • 2. 马尔可夫回报过程(Markov Reward Processes)
      • 3. 马尔可夫决策过程(Markov Decision Processes)
      • 4. 动态规划(Planning by Dynamic Programming)
        • 4.1 利用动态规划求解MDP问题
        • 4.2 策略评估(Policy Evaluation)和策略迭代(Policy Iteration)
        • 4.3 值迭代(Value Iteration)
        • 4.4 小结

1. 马尔可夫过程(Markov Processes)

马尔可夫过程是一种形式化描述强化学习过程中的环境的数学模型,与字面理解的意思可能有所不同,马尔可夫过程并没有涉及到跟“过程”相关的问题,仅仅只是对“环境”进行了定义。一个问题要想被定义为马尔可夫问题,必须具备以下几个特征:

  • 整个环境需要完全可观测(fully observable),这意味着整个环境中不可以出现部分可观测。
  • 环境中下一时刻的状态(St+1S_{t+1}St+1)只与当前的状态(StS_tSt)有关,不能依赖于之前的历史状态,即:

P(St+1∣St)=P(St+1∣S1,...,St−1,St)P(S_{t+1}|S_t) = P(S_{t+1}|S_1,...,S_{t-1},S_t) P(St+1St)=P(St+1S1,...,St1,St)

几乎所有的RL相关的问题都可以转化为MDP问题,部分可观测的问题(POMDP)问题同样也可以转换为MDP问题,因此MDP问题是所有问题的核心基础问题。

状态转移矩阵(State Transition Matrix

在马尔可夫过程中,一个状态sss在被执行了一个行为aaa后会转变为下一个状态s′s's,但从 s→s′s \rightarrow s'ss 的转移并不一定是百分之百成功的,因此定义一个状态转移概率来描述状态是否能够成功转移的概率:
Pss′=P[St+1=s′∣St=s]P_{ss'} = P[S_{t+1}=s'|S_t=s] Pss=P[St+1=sSt=s]
由于在马尔可夫过程中,环境是完全可观测的,因此所有可能的出现状态都能被观测到,我们把每一个可能的状态列举出来,并统计他们的状态转移概率,最终可以得到整个环境下状态转移矩阵为:
M=[P11P12...P1n...Pn1Pn1...Pnn]M= \left[ \begin{matrix} P_{11} & P_{12} & ... & P_{1n}\\ . \\ . \\ . \\ P_{n1} & P_{n1} & ... & P_{nn} \end{matrix} \right] M=P11...Pn1P12Pn1......P1nPnn
note: 矩阵中每一行加起来的和为1。

马尔可夫过程的定义

马尔可夫过程(马尔科夫链)是一个随机过程,是一个由若干个随机的、具有马尔可夫性质的状态(SSS)组成的序列。一条 Markov Chain 是一个元组<S,PS, PS,P>,由2个部分组成:

  • S→S \rightarrowS 一个状态(state)的集合
  • P→P \rightarrowP 一个状态转移概率矩阵

2. 马尔可夫回报过程(Markov Reward Processes)

在第1章中我们讲了 Markov 决策过程,是一个的状态的集合和一个状态转移概率矩阵,但我们如何去评判在一个状态下我们应该往哪一个状态去转移是最优的呢?这里我们将引入回报(Reward)来对状态转移效用进行一个量化表示。

马尔可夫回报过程的定义

马尔可夫回报过程是在马尔可夫决策过程上添加了汇报函数 RRR 和折扣因子 γ\gammaγ,是一个4元组 <S,P,R,γS, P, R, \gammaS,P,R,γ> :

  • S→S \rightarrowS 一个状态(state)的集合
  • P→P \rightarrowP 一个状态转移概率矩阵
  • R→R \rightarrowR 一个用于计算回报的函数,计算的是在 ttt 时刻下的即时回报
  • γ→\gamma \rightarrowγ 一个折扣因子,用于做未来回报计算时的衰减系数,γ∈(0,1)\gamma \in (0, 1)γ(0,1)

上面所提到的回报函数 RRR 只是用于计算在某一时刻下某一状态的即时回报,但为了能更有远见的评估当前这个状态的效用,我们通常会计算包含从该时刻起一直到最后一个时刻,这个状态之后所有可能的转移到的后续状态所引起的回报总值 GtG_tGt
Gt=Rt+1+γRt+2+...=∑k=0∞γkRt+k+1G_t = R_{t+1} + \gamma R_{t+2} + ... = \sum_{k=0}^\infty{\gamma^kR_{t+k+1}} Gt=Rt+1+γRt+2+...=k=0γkRt+k+1

值函数(Value Function

上面说到在MRP问题中,我们通常会引入总回报 GGG 来表示一个状态的长远回报,但由于 GGG 只是计算的一个 具体sample 中的具体得分,而真实的 GGG 是一个随机变量,我们是无法通过一次采样就确定其取值,因此我们引入值函数 v(s)v(s)v(s) 来描述状态 StS_tSt 的效用,使用期望值来代替一次采样中的具体得分:
v(s)=E[Gt∣St=s]v(s) = E[G_t|S_t=s] v(s)=E[GtSt=s]
值函数可以通过贝尔曼方程(Bellman Equation)拆分为2个部分:

  • 当前状态 StS_tSt 的即时回报 Rt+1R_{t+1}Rt+1

  • 衰减后的下一个状态 St+1S_{t+1}St+1 的值函数回报 γv(St+1)\gamma v(S_{t+1})γv(St+1)

因此,当前状态值函数又可以表示为当前状态的既时回报加上下一个状态的值函数:v(St)=Rt+1+γv(St+1)v(S_t) = R_{t+1} + \gamma v(S_{t+1})v(St)=Rt+1+γv(St+1)

考虑到状态转移是有概率的,即有可能出现 S1→S2S1 \rightarrow S2S1S2,也有可能出现 S1→S3S1 \rightarrow S3S1S3,下一时刻的状态是有概率进行随机转移的,这个我们之前使用状态转移概率矩阵 PPP 来描述,我们现在将其引入进来:
v(s)=Rt+1+γPv(s′)v(s) = R_{t+1} + \gamma P v(s') v(s)=Rt+1+γPv(s)
v(1)v(1)v(1) 代表状态1的值函数,R1R1R1 代表状态1的即时回报值,可以得到值函数的计算公式:
[v(1)v(2)...v(n)]=[R1R2...Rn]+γ[P(11)...P(1n)...P(n1)...P(nn)][v(1)v(2)...v(n)]\left[ \begin{matrix} v(1) \\ v(2) \\ . \\ . \\ . \\ v(n) \end{matrix} \right] = \left[ \begin{matrix} R1 \\ R2 \\ . \\ . \\ . \\ Rn \end{matrix} \right] + \gamma \left[ \begin{matrix} P(11) \ \ ... \ \ P(1n) \\ . \\ . \\ . \\ P(n1) \ \ ... \ \ P(nn) \end{matrix} \right] \left[ \begin{matrix} v(1) \\ v(2) \\ . \\ . \\ . \\ v(n) \end{matrix} \right] v(1)v(2)...v(n)=R1R2...Rn+γP(11)  ...  P(1n)...P(n1)  ...  P(nn)v(1)v(2)...v(n)

3. 马尔可夫决策过程(Markov Decision Processes)

马尔可夫决策过程(MDP)是在马尔可夫回报过程(MRP)上加上“决策”这一个元素,决策我们使用 AAA 来表示,代表 agent 的决策行为,因此MDP是一个5元组问题:<S,P,A,R,γS, P, A, R, \gammaS,P,A,R,γ>:

  • S→S \rightarrowS 一个状态(state)的集合
  • P→P \rightarrowP 一个受行为影响的状态转移概率矩阵,Pss′a=P[St+1=s′∣St=s,At=a]P_{ss'}^a = P[S_{t+1} = s'|S_t = s, A_t = a]Pssa=P[St+1=sSt=s,At=a]
  • A→A \rightarrowA 一个有限动作集
  • R→R \rightarrowR 一个用于计算回报的函数,Rsa=E[Rt+1∣St=s,At=a]R_s^a = E[R_{t+1} | S_t = s, A_t = a]Rsa=E[Rt+1St=s,At=a]
  • γ→\gamma \rightarrowγ 一个折扣因子,用于做未来回报计算时的衰减系数,γ∈(0,1)\gamma \in (0, 1)γ(0,1)

策略(Policy)

策略 π\piπ 是指在给定状态下,采取各种行为的一种概率分布:
π(a∣s)=P[At=a∣St=s]\pi(a|s) = P[A_t = a | S_t = s] π(as)=P[At=aSt=s]
note:策略 π\piπ 直接决定了 agent 的行为选择,在 MDP 问题中,策略 π\piπ 只能与当前的状态相关,历史状态无法对策略起到任何影响。这是因为我们在定义 MP 问题的时候就已经定义了,下一个时刻的状态与历史状态是完全独立的(参考第一章-马尔可夫过程特性)。

给定一个MDP问题M=<S,P,A,R,γ>M = <S, P, A, R, \gamma>M=<S,P,A,R,γ>,再给定一个策略 π\piπ,产生的状态序列 S1,S2,S3,...S1, S2, S3, ...S1,S2,S3,... 就是一个马尔可夫过程 (MP)<S,PπS, P^{\pi}S,Pπ>。产生的状态-回报序列 S1,R2,S2,...S1, R2, S_2, ...S1,R2,S2,... 就是一个马尔可夫回报过程(MRP)<S,Pπ,R,γS, P^{\pi}, R, \gammaS,Pπ,R,γ>。

MDP问题中的值函数

在MRP问题中,我们引入过值函数来描述一个状态的好坏,但在MRP问题中是没有涉及到策略 π\piπ 的,因此在MDP问题中,同一个状态在不同策略下所得到的评分也有可能不同,因此我们在评价一个状态的好坏时,还需要考虑目前所使用的策略 π\piπ,即:
Vπ(s)=Eπ[Gt∣St=s]V_{\pi}(s) = E_{\pi}[G_t | S_t = s] Vπ(s)=Eπ[GtSt=s]
由于在MDP问题中,引入了最为关键的元素 AAA,即 agent 的行为,那么在有些时候,我们不仅需要想要评价一个策略的好坏,同时还想要知道 agent 做出的行为的具体效用好坏,因此我们还需要一种能够描述行为 aaa 效用好坏的值函数:
qπ(s,a)=E[Gt∣St=s,At=a]q_{\pi}(s, a) = E[G_t|S_t=s, A_t = a] qπ(s,a)=E[GtSt=s,At=a]
通常,qπq_\piqπ 称为行为值函数, VπV_\piVπ 称为状态值函数。在行为值函数中,一般不会单独评价一个动作的效用,而是会评价动作-状态的效用,动作的效用与状态是紧密相关的,同样的动作在不同状态下产生的效用不同,同样的状态采取不同的行为效用也会不同。

状态值函数和行为值函数之间的转换

通过贝尔曼方程(Bellman Equation),我们可以将行为值函数拆解为:当前状态下得到的即时回报 + 下一个状态的状态值函数,这样我们就建立起了 t 时刻的行为值函数和 t+1 时刻的状态值函数的关系,表达式为:
qπ(s,a)=Rsa+γ∑s′∈SPss′aV(s′)q_\pi(s, a) = R_s^a + \gamma \sum_{s'\in S} P_{ss'}^aV(s') qπ(s,a)=Rsa+γsSPssaV(s)
在同一时刻,一个状态的值函数应该等于所有可能的行为产生的行为值函数之和,即:
Vπ(s)=∑a∈Aπ(a∣s)q(s,a)V_\pi(s) = \sum_{a \in A}\pi(a|s)q(s, a) Vπ(s)=aAπ(as)q(s,a)

状态值函数的求解形式

通过贝尔曼方程,我们可以把状态值函数表示为:
Vπ=Rπ+γPπVπV_\pi = R^\pi + \gamma P^{\pi}V_{\pi} Vπ=Rπ+γPπVπ
进而可以转化为:
(I−γPπ)Vπ=Rπ↓Vπ=(I−γPπ)−1Rπ(I - \gamma P^{\pi})V_\pi = R^\pi \\ \downarrow \\ V_\pi = (I - \gamma P^{\pi})^{-1}R^\pi (IγPπ)Vπ=RπVπ=(IγPπ)1Rπ

(具体怎么应用这个矩阵求解的示例参见这个链接:https://www.cnblogs.com/initial-h/p/9321961.html)

最优策略的求解

在一个环境中可能存在多种策略 π\piπ,当一个策略的值函数能够大于其他所有策略时(Vπ(s)>V∗(s)V_{\pi}(s) > V_*(s)Vπ(s)>V(s),则说明策略 π\piπ 为最优策略。最优策略可以通过最优行为值函数(q∗(s,a)q_*(s, a)q(s,a))来确定,最高效用行为的概率为1,其余行为取0:
KaTeX parse error: Got function '\newline' with no arguments as argument to '\begin{array}' at position 1: \̲n̲e̲w̲l̲i̲n̲e̲
因此一旦我们有了最优的行为值函数 q∗(s,a)q_*(s, a)q(s,a) 我们就能找到一个最优策略 π\piπ,我们使用最优贝尔曼方程进行求解,我们知道,一个状态的值函数的最大取值应当是该策略下最优行为的行为值函数取值:
v∗(s)=maxaq∗(s,a)v_*(s) = max_aq_*(s, a) v(s)=maxaq(s,a)
而行为值函数 q∗(s,a)q_*(s, a)q(s,a) 的取值可以转换为当前的即时回报加上下一时刻各个状态的状态值函数之和:
q∗(s,a)=Rsa+γ∑s′∈sPss′av∗(s′)q_*(s, a) = R_s^a + \gamma \sum_{s' \in s}P_{ss'}^av_*(s') q(s,a)=Rsa+γssPssav(s)
v(s′)v(s')v(s) 换算成 q(s,a)q(s, a)q(s,a) 的形式,可以得到最终结果:
q∗(s,a)=Rsa+γ∑s′∈sPss′amaxa′q∗(s′,a′)q_*(s, a) = R_s^a + \gamma \sum_{s' \in s}P_{ss'}^a max_{a'}q_*(s', a') q(s,a)=Rsa+γssPssamaxaq(s,a)
以上我们就得到了一个递归的式子,想要计算此刻最优的行为值函数取值只需要在之后的状态 s′s's 中选取具有最大效用的行为 a′a'a 即可。遗憾的是,贝尔曼最优方程并不是一个线性方程,我们需要使用迭代的方法进行求解,包括:值迭代、策略迭代、Q-Learning等方法,在之后的章节会着重讨论。

4. 动态规划(Planning by Dynamic Programming)

如何理解动态规划?“动态” 是指我们每次只能看到整个任务的 “一部分” ,整个任务是由若干个连续的部分组成起来的一个任务串,动态规划的核心思想就是将一个问题分解成若干个子问题再进行求解

举个例子来说:公司里面都有一定的组织架构,可能有高级经理、经理、总监、组长然后才是小开发。到了一年一度的考核季的时候,公司要挑选出三个最优秀的员工。一般高级经理会跟手下的经理说,你去把你们那边最优秀的3个人报给我,经理又跟总监说你把你们那边最优秀的人报给我,经理又跟组长说,你把你们组最优秀的三个人报给我,这个其实就动态规划的思想。将整个公司 “最优秀人员” 的问题(原问题)分解为各个部门“最优秀的人员”(子问题),最终再根据所有部门“最优秀的人员”(子问题)来进行比较推导出整个公司“最优秀的人员”(父问题)。一般来讲,动态规划问题可分为以下4个步骤来解决:

  1. 划分状态:即划分子问题,例如上面的例子,我们可以认为每个组下面、每个部门、每个中心下面最优秀的3个人,都是全公司最优秀的3个人的子问题

  2. 状态表示:即如何让计算机理解子问题。上述例子,我们可以实用f[i][3]表示第i个人,他手下最优秀的3个人是谁。

  3. 状态转移:即父问题是如何由子问题推导出来的。上述例子,每个人大Leader下面最优秀的人等于他下面的小Leader中最优秀的人中最优秀的几个。

  4. 确定边界:确定初始状态是什么?最小的子问题?最终状态又是什么。例如上述问题,最小的子问题就是每个小组长下面最优秀的人,最终状态是整个企业,初始状态为每个领导下面都没有最优名单,但是小组长下面拥有每个人的评分。

以上内容引自:沙茶敏碎碎念的动态规划入门博客

4.1 利用动态规划求解MDP问题

动态规划在MDP问题中通常用于以下两个方面:

  • 评判一个策略 π\piπ 的好坏:在给定一个MDP <S,P,A,R,γS, P, A, R, \gammaS,P,A,R,γ> 和一个策略 π\piπ 的情况下, 计算该策略 π\piπ 的评价函数 vπv_{\pi}vπ
  • 训练出一个好的策略 π∗\pi_*π:在一个给定的MDP <S,P,A,R,γS, P, A, R, \gammaS,P,A,R,γ> 中,求解一个最优策略 π∗\pi_*π

4.2 策略评估(Policy Evaluation)和策略迭代(Policy Iteration)

策略评估是指给定一个固定的策略 π\piπ,我们如何评判这个策略的好坏?通常我们使用贝尔曼方程的迭代法来得到求解:

  1. 首先我们随机化一个状态值函数 v1v_1v1v1v_1v1 是一个表,其存放了当前所有状态的效用值,v1(s1),v1(s2),...,v1(sn)v_1(s_1), v_1(s_2), ..., v_1(s_n)v1(s1),v1(s2),...v1(sn)
  2. 由于一开始的 v1v_1v1 是一个随机出来的表,不能正确的评价场景中状态的正确效用,我们需要让这个表中的效用值变成在采取策略 π\piπ 下的真实状态效用值,因此我们会不断更新这个表,从 v1→v2→...→vπv_1 \rightarrow v_2 \rightarrow ... \rightarrow v_\piv1v2...vπ,最终vπv_\pivπ 就是一个在策略 π\piπ 下,所有状态的效用值表。

上面说到我们会不断更新 vvv 表,最终更新为一个 vπv_\pivπ 表,但我们如何进行更新这个表中各个状态的效用值呢?我们先来看第一种方法 —— 同步backup法

  • 在第 k+1次迭代中:
    • 对于每一个状态 s∈Ss \in SsS
    • 根据 vk(s′)v_k(s')vk(s) 的值来更新 vk+1(s)v_{k+1}(s)vk+1(s) ,意思就是利用上一次迭代中的下个状态 s′s's 来更新这次迭代的当前状态 sss 的效用值。

用数学公式来表示:
vk+1(s)=∑a∈Aπ(a∣s)(Rsa+γ∑s∈SPss′avk(s′))v_{k+1}(s) = \sum_{a\in A}\pi(a|s)(R_s^a + \gamma\sum_{s \in S}P_{ss'}^av_k(s')) vk+1(s)=aAπ(as)(Rsa+γsSPssavk(s))
上述式子表达的意思是,在计算第 k+1k+1k+1 次迭代的状态 sss 的效用值时,用当前得到的即时回报值 RsaR_s^aRsa 再加上上一轮迭代表中的 s′s's 的效用值 vk(s′)v_k(s')vk(s),可以简化表示为:
vk+1=Rπ+γPπvkv^{k+1} = R^\pi + \gamma P^\pi v^k vk+1=Rπ+γPπvk

同步backup法应用举例

一个 4x4 的方格,一共有 4 种 action(上下左右),每走一步(除了走到灰色格子内)得到的 reward 都是 -1,目标是使得 agent 学会走到左上或右下的两个灰色格子中去。我们给定一个策略 π\piπ,该策略在任意一个状态下都随机进行行为选择(即上下左右行为的概率都是0.25),一个格子代表一个state,我们如何去计算在策略 π\piπ 下每一个 state 的 vvv 值?

下图左边是我们的 vvv 表迭代的过程,我们先随机初始化 vvv 表中所有状态的取值为0,在下一次迭代中(k=1),我们通过 backup 法一次计算每一个格子的状态值,这里用格子1(第一排第二个)进行举例:由于上下左右四个行为的采取概率均等(随机选取动作),即 π(up∣⋅)=π(down∣⋅)=π(left∣⋅)=π(right∣⋅)=0.25\pi(up|·) = \pi(down|·) = \pi(left|·) = \pi(right|·) = 0.25π(up)=π(down)=π(left)=π(right)=0.25,因此根据公式 vk+1=Rπ+γPπvkv^{k+1} = R^\pi + \gamma P^\pi v^kvk+1=Rπ+γPπvkγ=1\gamma = 1γ=1)可得 v1(s1)=−1+0.25∗0+0.25∗0+0.25∗0+0.25∗0=−1v_1(s_1) = -1 + 0.25 * 0 + 0.25 * 0 + 0.25 * 0 + 0.25 * 0 = -1v1(s1)=1+0.250+0.250+0.250+0.250=1。在k=2 的迭代中时,由于向上走后会停留在原地,因此向上走后转移到的状态还是自身,同样带公式计算可得到计算结果:v2(s1)=−1+0.25∗(−1)+0.25∗(−1)+0.25∗(−1)+0.25∗0=−1.75≈−1.7v_2(s_1) = -1 + 0.25 * (-1) + 0.25 * (-1) + 0.25 * (-1) + 0.25 * 0 = -1.75 \approx -1.7v2(s1)=1+0.25(1)+0.25(1)+0.25(1)+0.250=1.751.7

上图展示了前 3 轮迭代结果,一直迭代下去,vvv 表一定会收敛(有数学公式证明,这里不做讲解),收敛后的 vvv 表代表了在我们给定的策略 π\piπ 下每一个状态的真实取值。此时我们不仅得到了策略 π\piπ 下的状态值表,同时我们还可以根据这个 vvv 表通过贪婪算法得到一个新的更优策略 π′\pi'π(下图右),即在一个状态下每次都选择具有最大状态值的状态作为下一个转移状态,这个新策略 π′\pi'π 明显优于我们一开始给定的随机选择行为的策略 π\piπ(在k=3的时候最优策略就已经出现了,之后再没有变化过)。

上面的整个示例展示了 backup 法的两个功能:

  • 给定一个策略 π\piπ,评价在这个策略下各状态的好坏(vπv_\pivπ 表)
  • improve 策略 π\piπ,得到一个更好的策略 π′\pi'π

在大多数情况下,我们需要重复这两个步骤:评价一个给定策略 →\rightarrow 改善这个策略得到新策略 →\rightarrow 评价新策略 →\rightarrow 改善新策略得到另一个新策略 →\rightarrow ……,因此这是一个 **Evaluation - Improve **的迭代循环过程,这个过程我们就称之为 Policy Iteration(策略迭代)。在若干个策略迭代过程后,策略 π′\pi'π 会收敛到最优策略 π∗\pi_*π ,最优策略就是我们最终的求解策略了。

note:改善策略(Improvement)的方法有许多种,上面的实例我们使用的是贪婪策略(greedy)进行的策略提升,但大多数时候贪婪策略能够取得很好的结果。

4.3 值迭代(Value Iteration)

在策略迭代的部分我们提到,我们在最开始需要给定一个策略,并对该策略进行不断的 improve,通常我们选择等概率的行为选择策略作为初始策略,那我们能不能有一种方法完全不需要一开始给定初始策略呢?其实我们可以发现,在策略迭代的方法中我们给定初始策略就是为了得到一张 vvv 表,我们是根据这个 vvv 表来找出最优策略的,如果我们能不依赖一个初始策略就能计算出 vvv 表,那我们就能解决这个问题了,这就是值迭代法的由来。

首先我们思考,什么算是最优策略?最优策略是指不仅能在当前获取最大的行为效用值,在下一个状态应该也能取得最大的行为效用值,在之后的每一个状态都应该取得最大的行为效用值。按照这个定义,假定我们已知了一个最优策略 v∗v_*v,那么状态 sss 在该策略下的状态值函数 v∗(s)v_*(s)v(s) 可以分解为:
v∗(s)=argmaxaRsa+γ∑s′∈SPss′av∗(s′)v_*(s) = argmax_aR_s^a + \gamma\sum_{s' \in S}P^a_{ss'}v_*(s') v(s)=argmaxaRsa+γsSPssav(s)
上述式子表达了当前状态 sss 的状态值等于采取当前所有行为里有着最高效用值的行为得到的回报 + 下一个状态在最优策略下的状态值。因此,我们可以从后往前开始迭代计算了,由于终止状态 v(st)v(s_t)v(st) 的得分我们可知,终止状态的前一个状态 v(st−1)v(s_{t-1})v(st1) 的值 = 采取最大效用行为得到的回报值 Rst−1R_{s_{t-1}}Rst1+ 终止状态的状态值 v(st)v(s_{t})v(st),再前一个状态 v(st−2)v(s_{t-2})v(st2) 的状态值 = 采取最大效用行为得到的回报值 Rst−2R_{s_{t-2}}Rst2 + 后一个状态的状态值 v(st−1)v(s_{t-1})v(st1),…,依次迭代就可以求出每个状态的状态值了,vvv 表也就求解完成了。

Value Iteration 求解法举例

以下是一个 4x4 的方格,左上角是目标点,我们需要求出在任意一个格子到目标点的最短路径。我们把每一个格子看成是一个状态,每走一步得到的 reward 是 -1。下图表示了整个问题的求解流程:初始化所有状态值都为0,紧接着每一个格子都选择上下左右临近格子中状态值最大的那个格子,并用即时回报 -1 加上最大值邻居格子的状态值(参照上面的公式)。一直这么迭代下去,直到第 7 次的时候该表格收敛了,求到了最终的结果。有了 vvv 表我们的策略就相应的出现了,对于任意一个状态选择最大状态值的邻居格子就能够最快的到达终点格子了。

值迭代的方法要求人们需要枚举出该状态 sss 之后所有可能到达的状态 s′s's,并选择出具有最高效用值的状态作为自己的后续状态;并且整个问题必须存在终点(end point),毕竟是从后向前推的思路,如果环境无法全部可知或者终点状态不存在就无法使用该方法进行问题求解了。

4.4 小结

对整个利用动态规划解决 MDP 问题的方法进行一个归纳总结:

功能贝尔曼方程算法
状态值估计(vvv 表求解)贝尔曼期望方程迭代策略评估法(Iterative Policy Evaluation)
策略学习贝尔曼期望方程 + 贪婪策略策略迭代法(Policy Iteration)
策略学习贝尔曼最优方程值函数迭代法(Value Iteration)

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

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

相关文章

深入Java集合学习系列:ConcurrentHashMap之实现细节

http://www.iteye.com/topic/344876 ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现。在这之前我对ConcurrentHashMap只有一些肤浅的理解&#xff0c;仅知道它采用了多个锁&#xff0c;大概也足够了。但是在经过一次惨痛的面试经历之后&#xff0c;我觉…

基于小波变换的信号降噪处理及仿真研究_信号处理方法推荐--1(转载自用,侵删)...

综述作者&#xff1a;aresmiki链接&#xff1a;https://www.zhihu.com/question/23701194/answer/167005497来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。非平稳信号处理应该是现在信号处理技术最新的也是最热的研究方…

js温故而知新11(AJAX)——学习廖雪峰的js教程

Asynchronous JavaScript and XML&#xff0c;意思就是用JavaScript执行异步网络请求。 如果仔细观察一个Form的提交&#xff0c;你就会发现&#xff0c;一旦用户点击“Submit”按钮&#xff0c;表单开始提交&#xff0c;浏览器就会刷新页面&#xff0c;然后在新页面里告诉你操…

最流行的 .NET 开源项目合集

Github 上有很多优秀的 .NET 开源项目&#xff0c;它们很适合用来学习 .NET 、设计模式和架构。nopCommerce https://github.com/nopSolutions/nopCommercestar: 7k ⭐nopCommerce 是最受欢迎最好的开源电子商务购物车解决方案之一&#xff0c;它基于 ASP.NET Core&#xff…

GFS(Genetic Fuzzy Systems)—— 基于专家先验规则库和遗传算法相结合的智能体决策算法

文章目录1. FIS 系统&#xff08;Fuzzy Inference Systems&#xff09;1.1 什么是 FIS 系统&#xff1f;1.2 使用 FIS 算法的几个步骤2. GFS 系统&#xff08;GA FIS&#xff09;2.1 什么是基因遗传算法&#xff08;GA&#xff09;?2.2 使用GA算法进化FIS规则库在大规模的多智…

3-unit1 IPv6网络的管理

##########IPv6网络的管理#############学习目标了解IPv6管理IPv6##)IPv6简介Internet Protocol Version 6IPv6是IETF&#xff08;和互联网工程任务组&#xff09;设计的用与替代现行版本IP协议的下一代IP协议。IPv6采用128位2进制数码表示##IPv6示意图:##IPv6表示方式为方便操…

Xamarin效果第一篇之时间轴

一直都想找个时间玩玩移动端,中间也去各种的调研快速的方式去开发;过程中还是太浮躁木有沉下心去学习;好早尝试过Flutter,二点让我不爽:1、配置环境好费劲(VS把我惯坏了)&#xff1b;2、套娃的写法真是恶心;来看看酸爽不:因为一直都是C#开发,所以这次再次摸索Xamarin去开发;前面…

Lync 小技巧-42-动态-IP-统一沟通-环境-IP-变更后-操作

1. 查看-你的-公网IPhttp://www.ip138.com/2. 修改-你的-公网A记录https://www.godaddy.com/3. 修改-你的-拓朴-For-边缘服务器3.1.远程-前端服务器3.2.下载-拓朴3.3.选择-边缘服务器3.4.选择-边缘服务器3.5.修改-公网IP116.230.255.783.5.发布-拓朴3.6.导出-拓朴3.7.复制-拓朴…

Blazor University (1)介绍 - 什么是 Blazor?

原文链接&#xff1a;https://blazor-university.com/overview/what-is-blazor/什么是 Blazor&#xff1f;Blazor 是一个单页应用程序开发框架。Blazor 这个名称是单词 Browser 和 Razor&#xff08;.NET HTML 视图生成引擎&#xff09;的组合/变异。这意味着 Blazor 不必在服务…

jquery特效(1)—点击展示与隐藏全文

下班了~~~我把今天整理的一个jquery小特效发一下&#xff0c;个人觉得比较简单&#xff0c;嗖嗖的就写出来了~~~ 下面先来看最终的动态效果&#xff1a; 一、来看一下主体框架程序&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8&quo…

.NET Core中使用结果过滤器ResultFilter统一结果返回封装

介绍实现需要继承IResultFilter或者 IAsyncResultFilter。为了方便开发,简化代码,也为了与前端方便对接,需要对接口服务返回结果进行统一处理定义统一返回的结果类我们需要定义一个统一返回结果泛型类ApiResultpublic class ApiResult<T>{public int Code { get; set; }p…

UML 绘图关系

1 继承 子类继承父类2 实现实现类实现接口3 依赖 &#xff08;偶然、临时、比较弱关联&#xff09;类 A 使用了类 B&#xff0c;如果类 B 产生变化将会影响类A4 关联&#xff08;长期的、平等的、双向的、强依赖关系&#xff09;强依赖关系。5 聚合关系&#xff08;关联关系特例…

linux下网口监控软件_超赞的!Aibaba技术官分享高性能Linux服务器解读笔记

一个运行缓慢的应用程序有时会让人抓狂&#xff0c;此时需要在问题诊断的基础上进行性能调整。随着虚拟化、云计算时代的来临&#xff0c;Linux得到迅猛发展&#xff0c;在服务器领域已经占据半壁江山&#xff0c;而基于Linux的运维也面临新的挑战:面对越来越复杂的业务&#x…

Jwt Token 的刷新机制设计

Jwt Token 的刷新机制设计Intro前面的文章我们介绍了如何实现一个简单的 Jwt Server&#xff0c;可以实现一个简单 Jwt 服务&#xff0c;但是使用 Jwt token 会有一个缺点就是 token 一旦颁发就不能够进行作废&#xff0c;所以通常 jwt token 的有效期一般会比较短&#xff0c;…

辨别真假数据科学家必备手册:深度学习45个基础问题(附答案)

简介 早在2009年&#xff0c;深度学习还只是一个新兴领域&#xff0c;只有少数人认为它是一个多产的研究方向。今天&#xff0c;深度学习正在被用来开发那些过去被认为是不可能完成的应用。 语音识别&#xff0c;图像识别&#xff0c;数据中的模式识别&#xff0c;照片中的对象…

redis总结笔记

为什么80%的码农都做不了架构师&#xff1f;>>> 1、Redis的介绍和安装部署 NOSQL 》 Not Only SQL NOSQL以key-value形式存储 特点:非关系型、分布式、开源的、水平可扩展 NOSQL: 数据高并发读写 对海量数据的高效率存储和访问 对数据的搞可扩展性和高可用性 Redi…

go kegg_GO,KEGG富集分析工具——DAVID

DAVID(https://david.ncifcrf.gov/home.jsp)是一个生物信息数据库&#xff0c;整合了生物学数据和分析工具&#xff0c;为大规模的基因或蛋白列表(成百上千个基因ID或者蛋白ID列表)提供系统综合的生物功能注释信息&#xff0c;帮助用户从中提取生物学信息。DAVID目前的工具可以…

更轻易地实现 Jwt Token

更轻易地实现一个 Jwt ServerIntro最近在多个项目中都有用到 Jwt Token 认证&#xff0c;就想着把之前项目里 Jwt Token 的使用封装一下&#xff0c;以便于之后集成起来更加地方便&#xff0c;不用再拷贝代码了JWTJWT 是 JSON Web Token 的缩写&#xff0c;是目前最流行的基于 …

android之实现各个组件点击事件处理

android之实现各个组件点击事件处理&#xff1a;注意&#xff1a;&#xff08;TextView这个组件要点击产生效果的话&#xff0c;要设置&#xff0c;android:clickable"true"这个属性&#xff09;布局&#xff1a;layout/activity_main.xml<LinearLayout xmlns:and…

Android开发最佳实践《IT蓝豹》

Android开发最佳实践 移动开发Android经验分享应用GoogleMaterial Design摘要&#xff1a;前 段时间&#xff0c;Google公布了Android开发最佳实践的一系列课程&#xff0c;涉及到一些平时开发过程中应该保持的良好习惯以及如何使用最新的Android Design Support Library来快速…