【有限马尔科夫链状态分解+Kosaraju 算法】基于Kosaraju 算法和可达矩阵的有限马尔科夫链状态分解

article/2025/9/25 2:24:05

有限马尔科夫链状态分解+Kosaraju 算法

  • 1 实验内容
  • 2 理论基础
  • 3 题目分析
  • 4 按常返性和互通性对状态空间进行分解算法流程
    • 4.1 强连通性和强连通分量
    • 4.2 基于有向图 Kosaraju 算法的有限马尔科夫链状态分解
    • 4.3 算法正确性证明
    • 4.4 算法复杂度分析
  • 5 按周期对不可约闭集进行分解
  • 6 对例题分解验证算法正确性
  • 7 代码使用
  • 8 总结

1 实验内容

生成有 100 个状态的齐次马尔科夫链,状态转移矩阵随机生成(在满足完备

性约束下,可以随机由代码设置,注意保证状态有一定比例与其他状态的联通,

比如 3%;也可以自己提前设置好,但要保证有 2 个以上不可约子集)。

  1. 将状态空间按常返性和互通性进行分解;
  2. 在 1 的基础上对周期不可约马尔可夫链进行分解。

2 理论基础

C C C 为状态空间 I 的非空子集,若对任意 i ∈ C & & j ∉ C i\in C \&\& j \notin C iC&&j/C 都有 p i j = 0 p_{ij}=0 pij=0,则称为 C C C (随机)闭集,若 C C C 中所有状态是互通的,称 C C C 是不可约的闭集。若马尔可夫链 { X n } \{X_n\} {Xn} 的状态空间 I I I 是不可约的闭集,则称 { X n } \{X_n\} {Xn} 为不可约的马尔可夫链。

  1. 按常返性和互通性进行状态空间的分解

    任一马尔可夫链的状态空间 I,可唯一地分解成有限个或可列个不相交的集 D , C 1 , C 2 , . . . D, C_1, C_2, ... D,C1,C2,... 之和,使得:

    1. 每一 C n , n = 1 , 2 , . . . C_n,\ n=1, 2, ... Cn, n=1,2,... 是常返态组成的不可约闭集;
    2. C n , n = 1 , 2 , . . . C_n,\ n=1, 2, ... Cn, n=1,2,... 中的状态同类,即或全是正常返,或全是零常返,它们有相同的周期,且 f j k = 1 , j , k ∈ C n f_{jk}=1,\ j,k \in C_n fjk=1, j,kCn
    3. D D D 是由全体非常返状态组成,自 𝐶 n 𝐶_n Cn 中的状态不能到达 D D D 中的状态。
  2. 按对周期不可约马尔可夫链进行分解

    周期为 d d d 的不可约马氏链,其状态空间 C C C 可唯一地分解为$ d $​个互不相交的子集之和,即:
    C = ∪ r = 0 d − 1 G r , G r ∩ G s = Φ , r ≠ s C=\cup_{r=0}^{d-1}G_r,\quad G_r \cap G_s = \Phi, \quad r \ne s C=r=0d1Gr,GrGs=Φ,r=s
    且使自 𝐺 r 𝐺_r Gr中任一状态出发,经一步必转移进入 𝐺 r + 1 𝐺_{r+1} Gr+1 中(其中 G d = G 0 G_d = G_0 Gd=G0 )。

3 题目分析

由理论分析中的分解定理可知,对于有限马尔科夫链而言,状态常反与否及按周期的分解均与转移矩阵 P = ( p i j ) P=(p_{ij}) P=(pij) 的具体取值无关,而仅仅取决于各 p i j p_{ij} pij 是否为零。

由此可知,对于有限马尔科夫链的状态分解,我们只需要考虑转移矩阵 P = ( p i j ) P=(p_{ij}) P=(pij) 相应的邻接矩阵 B = ( b i j ) B=(b_{ij}) B=(bij) ,其中:
B i j = { 0 , p i j = 0 1 , p i j ≠ 0 i , j = 0 , 1 , 2 , . . . , n − 1 B_{ij}=\begin{cases} 0, \quad p_{ij} = 0\\ 1, \quad p_{ij} \ne 0 \end{cases} \quad i,j=0,1,2,...,n-1 Bij={0,pij=01,pij=0i,j=0,1,2,...,n1
当且仅当 b i j = 1 b_{ij}=1 bij=1 时,表示状态 𝑖 𝑖 i 可一步到达状态 𝑗 𝑗 j

我们可以看到,若状态 𝑖 𝑖 i 可到达状态 𝑗 𝑗 j,则存在长度至多为 n − 1 n-1 n1 的路径从 𝑖 𝑖 i 到达 j j j。因而为求各节点的闭包,只需要计算 B B B 的可达矩阵 B ‾ \overline{B} B​:
B ‾ = B + B 2 + ⋯ + B n \overline{B} =B+B^2+\cdots + B^n B=B+B2++Bn
其中乘法、加法均为布尔运算, B ‾ \overline{B} B 的第 𝑖 , 𝑗 𝑖, 𝑗 i,j b i j ‾ = 1 \overline{b_{ij}} = 1 bij=1 表示自 𝑖 𝑖 i 出发必可在有限步到达 𝑗 𝑗 j b i j ‾ = 0 \overline{b_{ij}} = 0 bij=0 表示永远不可能达到 𝑗 𝑗 j

通过以上分析可知,相对于直接计算 n n n 步转移矩阵来判断可达,转化为可达矩阵的布尔运算大大减少了计算量。可以将其转为一个有向图算法。

4 按常返性和互通性对状态空间进行分解算法流程

4.1 强连通性和强连通分量

有向图中的强连通性是一种顶点之间等价关系,它有着以下性质:

  • 自反性:任意顶点 v 和自己都是强连通的。
  • 对称性:如果 v 和 w 是强连通的,那么 w 和 v 也是强连通的。
  • 传递性:如果 v 和 w 是强连通的且 w 和 x 也是强连通的,那么 v 和 x 也是强连通的。

作为一种等价关系,强连通性将所有顶点分为了一些等价类,每个等价类都是由相互均为强连通的顶点的最大子集组成的。我们将这些子集称为强连通分量,请见图 1。样图含有 5 个强连通分量。
在这里插入图片描述

图 1 强连通分量示意图

4.2 基于有向图 Kosaraju 算法的有限马尔科夫链状态分解

  1. 读入转移矩阵,生成有向图 G G G(若 p i j ≠ 0 p_{ij}\ne 0 pij=0,则有一条从 𝑖 𝑖 i 指向 𝑗 𝑗 j 的边)。
  2. 利用 Kosaraju 算法得到有向图 G G G 中所有的强连通分量。
  3. 遍历每个强连通分量,若一个强连通分量中的节点不能达到另一个强连通分量,说明此强连通分量是一个不可约的闭集 𝐶 𝐶 C;若可以达到另一个强连通分量,则说明此分量中的节点是非常反的,属于子集 D D D
  4. 验证算法正确性。

4.3 算法正确性证明

  1. 所有的强连通分量满足分量中的节点相互连通(对于马尔科夫链而言,就是状态可达),并且不会和其他强连通分量中的节点相互连通。现用反证法证明如下:若强连通分量 C 1 C_1 C1 中的节点 i i i 与另一强连通分量 C 2 C_2 C2 中的节点 j j j 相互可达,是强连通的,那么对于 C 1 C_1 C1 中的其他节点 k k k 均可通过 i i i 到达 j j j j j j 也可以通过 i i i 到达 k k k ,那么明 𝑗 , 𝑘 𝑗, 𝑘 j,k 是强连通的,按照有向图强连通分量的定义, 𝑗 𝑗 j 也将属于 C 1 C_1 C1 ,而本身 j j j 不属于 C 1 C_1 C1 ,所以说明,若 C 1 C_1 C1 一个最大不可约的。
  2. 若强连通分量中的节点不能到达另一个强连通分量,那么此分量是一个闭集,通过 4.2 算法的第三步可以找出所有的闭集,剩余的强连通分量必然是由非常反的状态(节点),用反证法证明:若剩余的强连通分量(即可从本强连通分量到另一个强连通分量)中的节点(状态) 𝑖 𝑖 i是常反的,那么从 𝑖 𝑖 i能通过 𝑖 𝑖 i所在的强连通分量到达其余强连通分量 𝑗 𝑗 j,然后再回到 𝑖 𝑖 i,那么说明 𝑖 → 𝑗 → 𝑖 𝑖→𝑗→𝑖 iji,那也可 𝑖 → 𝑗 → 𝑖 → 𝑗 𝑖→𝑗→𝑖→𝑗 ijij,那么说明 𝑖 𝑖 i, 在同一强连通分量中,然而 Kosaraju算法保证 𝑖 , 𝑗 𝑖, 𝑗 i,j不在同一强连通分量中,与假设矛盾,所以剩余的强连通分量中的节点都是非常反的,属于集合𝐷。
  3. 在算法第三步中不可达到外部的强连通分量是否是周期相同的?由上两步分析可知,不可达到外部的强连通分量是一个不可约闭集,因为强连通分量的状态是相互连通的,周期必然相等。

由以上两个证明,可以得知,通过这种方法能成功对有限马尔科夫链进行状态分解。

4.4 算法复杂度分析

假设有限图节点(状态)数量为𝑉,有向边数量为𝐸,算法复杂度分析分为两个部分:

  1. Kosaraju 算法的复杂度为 𝑂 ( V + E ) 𝑂(V+E) O(V+E)
  2. 4.2 算法流程的第三步,也是遍历一次所有的边和节点,所以复杂度也是 𝑂 ( V + E ) 𝑂(V+E) O(V+E)

综上,整个算法的复杂度为 𝑂 ( V + E ) 𝑂(V+E) O(V+E)

5 按周期对不可约闭集进行分解

  1. 选取不可约闭集 C i C_i Ci的某一状态 𝑝 𝑝 p,记其为集合 𝐺 1 𝐺1 G1
  2. 由邻接矩阵得到 𝐺 1 𝐺1 G1 中每一状态的所有下一步可达状态,将其全体记为集合 𝐺 2 𝐺2 G2,将 𝐺 2 𝐺2 G2 输出保存得到 𝐶 𝑖 𝐶_𝑖 Ci周期性分解的子集之一 𝐺 j 𝐺_j Gj
  3. 将第二步所得 𝐺 2 𝐺2 G2 记为当前的 𝐺 1 𝐺1 G1,循环第二步操作直至所有状态都归于某一 𝐺 j , j = 1 , 2 , ⋯ , r 𝐺_j,\quad j=1,2,\cdots, r Gj,j=1,2,,r

由上述步骤,可将某不可约闭集 C i C_i Ci​分按周期分解为互不相交子集之并:
C i = ∑ j = 1 r G i C_i=\sum_{j=1}^r G_i Ci=j=1rGi

6 对例题分解验证算法正确性

例:设不可约马氏链的状态空间为 C = 1 , 2 , 3 , 4 , 5 , 6 C={1, 2, 3, 4, 5, 6} C=1,2,3,4,5,6,转移矩阵为

在这里插入图片描述

状态转移有向图为:

在这里插入图片描述

为了能有按常返性和互通性进行状态空间的分解的功能,我加上了第七个状态,此状态能达到 2,3,4 状态。算法输出结果如下图:

在这里插入图片描述
然后按周期对不可约马尔科夫链进行状态分解,结果如下:

在这里插入图片描述

由实验结果可知,本次设计满足要求。

7 代码使用

只需在 main 函数中修改常量 N 和 ratio 的值即可修改代码,原始的代码是例题的解决,作为一个测试,测试代码的正确性。如需使用随机生成的数据,请将下图的中的第一行注释,第二三行取消注释。

在这里插入图片描述

8 总结

具体代码大家可以下载,需要积分,因为我觉得通过上面的分析,自己写也是可行的,希望参考这篇文章的同学们先自己实现。
【有限马尔科夫链状态分解+Kosaraju 算法】代码下载


http://chatgpt.dhexx.cn/article/PL5JD2cQ.shtml

相关文章

R 语言 | 计算可达矩阵

在微博有位朋友问我可达矩阵的计算&#xff0c;于是发了点时间用R语言写出来了。 问题如下&#xff1a; 计算过程&#xff1a; 注意&#xff1a;是矩阵的乘法。 代码如下&#xff1a; A <- matrix(c(0,0,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0),nrow5) A1 …

一种使用Python计算可达矩阵的简单方法

在进行编码前要简单介绍几个知识点&#xff1a;有向图&#xff0c;邻接矩阵&#xff0c;可达矩阵 有向图、邻接矩阵、可达矩阵 有向图 现实中常常会表示从一个地点到另一个地点的路径&#xff0c;这样的带有从起点到终点的路线表示可以用有向图表示。如下图所示&#xff1a;…

系统工程利用python求解可达矩阵

系统工程中利用python求解可达矩阵 在系统工程书中&#xff0c;建立解释结构模型中求解可达矩阵是必不可少的一环故利用python写了一段求解可达矩阵的代码&#xff0c;只需要输入邻接矩阵便可计算得到可达矩阵代码如下&#xff1a; import numpy as npdef change(a): 乘以自身…

通过有向图的可达矩阵判断有向图的连通类型

我们根据有向图的连通情况&#xff0c;可以将图分成四种类型 非连通图弱连通图单向连通图强连通图 我们可以通过邻接矩阵A&#xff0c;计算可达矩阵B&#xff0c;然后经过二值化之后得到可达性矩阵P来判断该图属于以上哪一种。 如果P中元素都为1&#xff0c;说明任意两点之间…

【算法导论】有向图的可达矩阵

有时候&#xff0c;我们关注的不是从一个地点到另一个地点的费用&#xff0c;而是能否从一个顶点到达另一个顶点。因此我们可以假设所有边的权值为单位1&#xff0c;在下面的算法中&#xff0c;我们可以在O(n*n*n)的时间内计算出图中任意两点是否可达&#xff0c;我用可达矩阵来…

图论总复习

《图论及其应用》 主要考试知识点&#xff1a; 第2章&#xff0c;第 3章&#xff0c;第5 章&#xff0c;第 6章&#xff0c;章节占比&#xff1a;20%&#xff0c;25%&#xff0c;30%&#xff0c;25%。 **第2章&#xff1a;**图的定义、度的概念、握手定理、可图画、同构、子…

图的邻接矩阵求图的出度,入度,可达矩阵,判断强连通,弱连通,单向连通(C++,vs2017)

一、介绍概念 1、邻接矩阵 将一个n个节点的图&#xff0c;转化成一个n*n的矩阵G&#xff0c;G[i][j]表示第i个节点到第j个节点的的权重。 对于上图邻接矩阵为&#xff1a; 2、度 度分为入度和出度&#xff1a;某个节点的入度就是可以通过一条边到达这个节点的节点个数&#xff…

【离散数学】图论 第七章(3) 图的矩阵表示(邻接矩阵、可达矩阵、传递闭包求解算法)

本文属于「离散数学」系列文章之一。这一系列着重于离散数学的学习和应用。由于内容随时可能发生更新变动&#xff0c;欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘。此外&#xff0c;在本系列学习文章中&#xff0c;为了透彻理解数学知识&#xff0c;本人参考了诸多博…

硬盘的存储原理和内部架构

首先&#xff0c;让我们看一下硬盘的发展史&#xff1a; 1956年9月13日&#xff0c;IBM的IBM 350 RAMAC(Random Access Method of Accounting and Control)是现代硬盘的雏形&#xff0c;整个硬盘需要50个直径为24英寸表面涂有磁浆的盘片&#xff0c;它相当于两个冰箱的体积&…

硬盘结构与工作原理

一、硬盘的接口 接口种类&#xff1a; ATA(Advanced Technology Attachment)(IDE):速度最大可达133MB/S; SATA(Serial ATA):速度最大可达300MB/S SCSI(Small Computer System Interface):转速最大可达15000rpm SAS(Serial Attachment SCSI):速度最大可达6GB/S 二、硬盘的物理结…

硬盘的种类、区别、运行原理

硬盘是电脑主要的储存媒介之一&#xff0c;由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。 硬盘的种类可分为&#xff1a; 1、固态硬盘&#xff08;SSD&#xff09;&#xff0c;采用闪存颗粒来储存&#xff1b; 2、机械硬盘&#xff08;HDD&#xff09;&a…

硬件(磁盘):机械硬盘内部硬件结构和工作原理详解

从理解磁盘IO开始 主轴让磁盘盘片转动&#xff0c;然后传动手臂可伸展让读取头在盘片上进行读写操作。每个盘片有两面&#xff0c;都可记录信息&#xff0c;所以一张盘片对应着两个磁头。 磁盘物理结构如下图: 硬盘的外部物理结构 一般硬盘正面贴有产品标签&#xff0c;主要…

硬盘的读写原理详解

硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等&#xff1b;任何一种硬盘的生产都要一定的标准&#xff1b;随着相应的标准的升级&#xff0c;硬盘生产技术也在升级&#xff1b;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3&#xff1b;其中目前咱们经常在服务器网站看…

磁盘存储原理

最近学习linux内核源码&#xff0c;读到操作系统boot引导相关内容时&#xff0c;对于磁盘相关原理介绍引起我的兴趣。阅读相关资料后&#xff0c;对磁盘工作原理做一个总结&#xff0c;参考资料为深入理解计算机系统&#xff08;CSAPP)。 磁盘是广泛应用的数据存储设备&#x…

[硬件] 简单介绍磁盘结构及工作原理

一、前言 最近学习&#xff24;&#xff2f;&#xff33;下的汇编语言用到了很多与硬件相关的指令&#xff0c;比如上一期写的int 13h&#xff08;直接磁盘服务&#xff09;&#xff0c;其中接口参数中就有驱动器号&#xff0c;磁头&#xff0c;磁道&#xff0c;扇区的概念&am…

机械硬盘的存储结构及原理

本文转载自:https://blog.csdn.net/u013125075/article/details/86576640 硬盘是电脑主要的存储媒介之一。根据硬盘的读写方式和存储方式不同&#xff0c;当前主流的硬盘可以分为固态硬盘&#xff08;SSD硬盘&#xff09;、机械硬盘&#xff08;HDD 硬盘&#xff09;两种。由于…

硬盘技术原理

**传统硬盘** 所有机械硬盘的原理相同。盘片被磁性材料覆盖&#xff0c;盘片上的磁性粒子被极化以表示一个二进制信息单元&#xff08;或比特&#xff09;。使用磁性材料来存储数据历史很久了&#xff0c;这种方式相对便宜&#xff0c;因此相对于其它存储技术而言&#xff0c;这…

机械硬盘原理介绍

硬盘结构及工作原理 目录&#xff1a; 硬盘结构 概念&#xff1a;盘面、柱面、磁道、扇区、簇 盘面 磁道 扇区 柱面 簇 硬盘读写数据的过程 SMR叠瓦式硬盘 其他硬盘知识 硬盘发展历史 硬盘结构及工作原理 硬盘结构 经过封装后的硬盘&#xff0c;对我们一般呈现出如下的样子…

机械硬盘原理

本篇参考自&#xff1a; https://zhuanlan.zhihu.com/p/89505052 https://blog.csdn.net/li_wen01/article/details/80221182 磁盘存储器原理介绍&#xff1a; 为了了解磁盘的运行原理&#xff0c;先上一些图来展示机械硬盘的构造和运行状态 可以看见&#xff0c;硬盘拆开…

硬盘的读写原理

硬盘的种类主要是SCSI 、IDE 、以及现在流行的SATA等&#xff1b;任何一种硬盘的生产都要一定的标准&#xff1b;随着相应的标准的升级&#xff0c;硬盘生产技术也在升级&#xff1b;比如 SCSI标准已经经历了SCSI-1 、SCSI-2、SCSI-3&#xff1b;其中目前咱们经常在服务器网站看…