算法学习笔记(23): 马尔可夫链中的期望问题

这篇具有很好参考价值的文章主要介绍了算法学习笔记(23): 马尔可夫链中的期望问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

马尔可夫链中的期望问题

这个问题是我在做 [ZJOI2013] 抛硬币 - 洛谷 这道题的时候了解的一个概念。

在网上也只找到了一篇相关的内容:# 马尔可夫链中的期望问题

故在这里来分享一下其中的期望问题。

目录
  • 马尔可夫链中的期望问题
    • 马尔可夫链
      • 概率转移矩阵
    • 转移矩阵的修订
    • 状态中的期望
      • 期望线性方程组
        • 方程矩阵化
      • 例题
    • 作者有话说

马尔可夫链

定义:马尔科夫链为状态空间中经过从一个状态到另一个状态的转换的随机过程。该过程要求具备“无记忆性”,也就是说当前状态的概率仅与上一个状态相关。

数学定义:假定我们的序列状态为 \(\dots, X_{t-2}, X_{t-1}, X_t, X_{t+1}, X_{t+2}, \dots\),那么在 \(X_{t+1}\)

时刻的状态的条件概率仅依赖于前一刻的状态 \(X_t\),即:

\[P(X_{t+1}| ..., X_{t-2}, X_{t-1}, X_t) = P(X_{t+1} | X_t) \]

既然某一时刻状态转移的概率只依赖于它的前一个状态 ,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了。


概率转移矩阵

通过马尔科夫链的模型转换,我们可以将事件的状态转换成概率矩阵 (又称状态分布矩阵 ),如下例:

其中线上的数字表示是状态转移到另一状态的概率

那么我们可以构造出如下矩阵:

\[P = \begin{pmatrix} & A & B & C & D \\ A & 0 & 0 & 0 & 0.5 \\ B & 0 & 0 & 0.25 & 0.5 \\ C & 1 & 0 & 0.5 & 0 \\ D & 0 & 0 & 0.25 & 0 \end{pmatrix} \]

假定我们初始状态为 \(A\),于是状态矩阵可以定义为

\[S = \begin{pmatrix} 1 \\ 0 \\ 0 \\ 0 \end{pmatrix} \]

那么经过 \(k\) 次转移后的概率分布是什么?

\[S_k = P^kS \]

例如 \(k = 4\)

\[S_4 = \begin{pmatrix} 0.0625 \\ 0.125 \\ 0.25 \\ 0.0625 \end{pmatrix} \]

通过 numpy 计算:

s = np.array([[1], [0], [0], [0]])
P = np.array([
      [0, 0, 0, 0.5],
      [0, 0, 0.25, 0.5],
      [1, 0, 0.5, 0],
      [0, 0, 0.25, 0]
])
i, n = 0, 4
while i < n:
    s = P.dot(s)
    i = i + 1
print(s)

转移矩阵的修订

如果我们到达了某一个点就结束了整个过程,那么我们需要对状态转移做一定的更改:

呃,这部分对于本文似乎有一点偏题了……请适当略过

我们新增了一个节点,将所有转移到 \(B\) 的状态转移为最终状态,也就是对于 \(B\) 的状态累计求和。

于是新的矩阵成为:

s = np.array([[1], [0], [0], [0], [0]])
P = np.array([
      [0, 0, 0, 0.5, 0],
      [0, 0, 0.25, 0.5, 0],
      [1, 0, 0.5, 0, 0], 
      [0, 0, 0.25, 0, 0], 
      [0, 1, 0, 0, 1]
])   

最终 \(S_k = P^kS\) 就是积累后的概率矩阵。


状态中的期望

我们关注的是到达状态 \(B\) 所需要的平均转移次数,所以我们把随机变量 \(X\) 看作到达目标状态所需要的步数。

根据变量期望的定义可得:

\[E(X) = \sum_{k = 1}^{\infty} [k \cdot P(X = k)] \]

那么现在的问题就变为了求 \(P(X = k)\)

根据上文,\(P(X = k) = [B]S_k = [B]P^kS\),也就是取 \(S_k\)\(B\) 相关的那一项。

或许我们可以求得 \([B]S_k\) 的通项(一个多项式?)从而求得期望。

在顶端链接的文章中提到:

事实上,我们可以计算转移矩阵的 \(n\) 次方,即得到各元素关于 \(n\) 的表达式.

由于我没有学过线性代数,所以我就不在本文中展开。

而是采用第二种方法:期望线性方程组


期望线性方程组

显然至少目前对我而言,求通项的方法不可行,所以我们需要利用另外一种方法。

我们仍然求从 \(A\) 转移到 \(B\) 所需要的平均转移次数。

那么我们不妨设 \(E_i\) 表示从状态 \(i\) 转移到 \(B\) 所需要的期望次数,\(p_{ji}\) 表示从状态 \(j\)\(i\) 转移来的概率。

那么有:

\[E_i = 1 + \sum_{j} p_{ji} \cdot E_j \]

也就是说 \(E_i\) 等于 \(i\) 可以直接转移到的状态的期望乘上转移的概率的和再加上 \(1\)(转移的代价,1步)

以上文中例子为例,可以列出:

\[\begin{aligned} E_A &= E_C + 1 \\ E_C &= 0.25E_B + 0.25E_D + 1 \\ E_D &= 0.5E_A + 0.5E_B + 1\\ \end{aligned} \]

而特殊的,\(E_B = 0\),因为已经到达目标了

而可以解出 \(E_A = 4\)

也就是说,从 \(A\) 转移到 \(B\) 的期望步数是 \(4\)


方程矩阵化

如果我们把列出来的方程看作矩阵,那么可以得到:

P = np.array([
    [0-1, 0, 1, 0],
    [0, 0-1, 0, 0],
    [0, 0.25, 0.5-1, 0.25],
    [0.5, 0.5, 0, 0-1]
])

似乎是我原本概率转移矩阵有问题?

也就是原概率矩阵的转置矩阵再在对角线上全部减一。

或者可以表示为

\[P' = P^T - I_n \]

而我们最终求解的方程为:

\[P'E = \begin{pmatrix} -1 \\ -1 \\ \vdots \\ -1 \end{pmatrix} \]

利用死去的高斯消元即可。


例题

链接:[六省联考 2017] 分手是祝愿 - 洛谷

在题解区中全是某种奇怪的 DP 设计。所以这里来讲述一下利用本文中的方法求解的方法。

最开始的模型转化我们就省略了……

我们设 \(E_i\) 表示从剩下 \(i\) 个地方没有按下到全部按下的期望步数。

根据题目,我们有:

\[E_i = \frac in E_{i-1} + \frac {n-i}n E_{i+1} + 1 \]

并且由于最优限制:

\[i \le k \iff E_i = i \]

所以我们可以轻易的利用高斯消元求解……但是很明显,这是不现实的……考虑这个矩阵是一个稀疏矩阵,而且每一个方程是只与临近对角线的 3 个元素相关,所以我们可以轻易的将空间优化到 \(O(3n)\)

参考至知乎:# 数值线性代数|LU分解与稀疏矩阵

于是我们可以 旋转 一下,只存储非0的元素

接下来我们只需要参考 Guass-Jordan 消元法(先从上到下消下三角,再从下到上消上三角)。那么复杂度成功的也被我们降到了 \(O(n)\)。只是常数有点小大……


作者有话说

其实本文讲述的方法存在很大的局限性,尤其的求解的过程,很容易就变成了 \(O(n^3)\)

不过似乎建模的过程还是蛮简单的?

在求期望的问题中,这不失为一个思考的方向。有些时候,可以通过题目相关的特殊性质进行优化,使得复杂度降低。

可是毒瘤出题人们……还是看每道题的正解吧,或许终将有一天,这个方法可以被一种通法优化到 \(O(n^2)\) 呢?文章来源地址https://www.toymoban.com/news/detail-467465.html

到了这里,关于算法学习笔记(23): 马尔可夫链中的期望问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法介绍及实现——马尔可夫链、隐马尔可夫链(附Python实现)

    目录  ——马尔可夫链 ——隐马尔可夫链 马尔科夫性质: 即当前在已知时,过去和未来是独立的,如果知道当前的状态,那么就不许要过去的额外信息来对未来做出预测。 理解 :n为n-1的后一个时间(或者说单位),若n-1为当前时刻状态,那么n即为下一刻的未来状态,0至

    2024年02月05日
    浏览(41)
  • 深入理解强化学习——马尔可夫决策过程:马尔可夫奖励过程-[计算马尔可夫奖励过程价值的动态规划方法]

    分类目录:《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程:马尔可夫奖励过程-[计算马尔可夫奖励过程价值的蒙特卡洛方法]》介绍了计算马尔可夫奖励过程价值的蒙特卡洛方法,同时我们也可以用动态规划的方法,一直迭代贝尔曼方程,直到价

    2024年02月05日
    浏览(31)
  • 【机器学习】马尔可夫链与隐马尔可夫模型(HMM)

            马尔可夫链(Markov chain),又称离散时间马尔可夫链(discrete-time Markov chain),因俄国数学家安德烈·马尔可夫(A.A.Markov)得名。描述的是状态空间中经过从一个状态到另一个状态的转换的 随机过程 。该过程要求具备“无记忆”的性质: 下一状态的概率分布只能

    2024年02月13日
    浏览(29)
  • 数学建模常用算法—马尔可夫预测

    今天数模君带大家学习一下数学建模中的预测算法之马尔科夫预测。 目录 模型的含义 实例分析 马尔可夫(Markov)预测法,就是一种关于事件发生的概率预测方法。它是根据事件的目前状况来预测其将来各个时刻(或时期)变动状况的一种预测方法。马尔可夫预测法是地理预测

    2024年02月09日
    浏览(38)
  • 机器学习:马尔可夫模型

    后续遇到合适的案例会再补充   马尔可夫模型(Markov Model, MM)是一种统计模型,广泛应用在自然语言处理等领域中。 1.1 数学定义   考虑一组随机变量序列 X = { X 0 , X 1 , … , X t , …   } X={X_{0},X_{1},dots,X_{t},dots} X = { X 0 ​ , X 1 ​ , … , X t ​ , … } ,其中 X t X_{t} X t ​ 表

    2024年02月13日
    浏览(31)
  • 【强化学习】03 ——马尔可夫决策过程

    在此推荐另一篇文章【自动驾驶决策规划】POMDP之Introduction 提供了一套在结果 部分随机 、 部分在决策者的控制下的决策过程建模 的数学框架。 MDP形式化地描述了一种强化学习的环境 环境完全可观测 当前状态可以完全表征过程(马尔科夫性质) 几乎所有的RL问题都可以转换到

    2024年02月07日
    浏览(29)
  • 隐马尔可夫模型HMM学习备忘

    隐马尔可夫模型示意图如图[1]: 隐含状态转换关系示意图: 1、马尔可夫模型的理解 包含 N N N 个状态的系统,马尔可夫过程是状态 S i S_i S i ​ (在此 q t q_t q t ​ 为状态 S i S_i S i ​ 在时间 t t t 的状态变量)变化转移过程,状态转移依赖前 p 个状态,与其他时刻状态无关,称

    2024年02月10日
    浏览(31)
  • 基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真

    目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序         基于HMM隐马尔可夫模型的金融数据预测算法.程序实现HMM模型的训练,使用训练后的模型进行预测。 MATLAB2022A版本运行        隐马尔可夫模型(Hidden Markov Model, HMM)是一种概

    2024年04月25日
    浏览(25)
  • 深入理解强化学习——马尔可夫决策过程:动态规划方法

    分类目录:《深入理解强化学习》总目录 动态规划(Dynamic Programming,DP)适合解决满足最优子结构(Optimal Substructure)和重叠子问题(Overlapping Subproblem)两个性质的问题。最优子结构意味着,问题可以拆分成一个个的小问题,通过解决这些小问题,我们能够组合小问题的答案

    2024年02月03日
    浏览(34)
  • RL - 强化学习 马尔可夫奖励过程 (MRP) 的状态价值

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131084795 GitHub 源码: https://github.com/SpikeKing/Reinforcement-Learning-Algorithm 马尔可夫奖励过程 (MRP) 的状态价值是指在某个状态下,从该状态开始,按照某个策略执行动作所能获得的累积奖励的

    2024年02月08日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包