DTMC马尔可夫链 - 如何获得静止向量

时间:2013-06-02 23:36:47

标签: markov-chains

对于离散时间马尔可夫链问题,我有以下内容:

1)转换矩阵:

0.6  0.4  0.0  0.0
0.0  0.4  0.6  0.0
0.0  0.0  0.8  0.2
1.0  0.0  0.0  0.0

2)初始概率向量:

1.0  0.0  0.0  0.0

所以,我写了下面的SciLab代码来获取静止向量:

P = [0.6, 0.4, 0, 0; 0, 0.4, 0.6, 0; 0, 0, 0.8, 0.2; 1,0,0,0]
PI = [1,0,0,0]
R=PI*P
count=0;
for i = 1 : 35  // stationary vector is obtained at iteration 33, but i went futher to be sure
    R=R*P;
    count=count+1
    disp("count = "+string(count))
end

PI // shows initial probability vector
P // shows transition matrix
R // shows the resulting stationary vector

在迭代次数33之后,获得以下得到的静止向量:

0.2459016    0.1639344    0.4918033    0.0983607

我必须执行哪些手动计算才能到达上面的静止向量而不必将转换矩阵乘以33次然后将结果乘以初始向量?

有人告诉我,这些计算非常简单,但即使看完了一些书,我也无法意识到该做什么。

当然,欢迎解释,但最重要的是我希望得到这个具体案例的确切答案。

感谢您的帮助!

的La-罗克

1 个答案:

答案 0 :(得分:0)

您可以使用以下短代码解决Octave上的DTMC:

P = [
  0.6, 0.4,   0,   0;
    0, 0.4, 0.6,   0;
    0,   0, 0.8, 0.2;
    1,   0,   0,   0
  ]

pis = [P' - eye(size(P)); ones(1, length(P))] \ [zeros(length(P), 1); 1]

或使用此代码的SAGE:

P = matrix(RR, 4, [
  [0.6, 0.4,   0,   0],
  [  0, 0.4, 0.6,   0],
  [  0,   0, 0.8, 0.2],
  [  1,   0,   0,   0]
  ])

I = matrix(4, 4, 1); # I; I.parent()
s0, s1, s2, s3 = var('s0, s1, s2, s3')
eqs = vector((s0, s1, s2, s3)) * (P-I); eqs[0]; eqs[1]; eqs[2]; eqs[3]
pis = solve([
  eqs[0] == 0,
  eqs[1] == 0,
  eqs[2] == 0,
  eqs[3] == 0,
  s0+s1+s2+s3==1], s0, s1, s2, s3)

在两者上,稳态概率向量的结果是:

pis =
   0.245902
   0.163934
   0.491803
   0.098361

我希望它有所帮助。

WBR, 阿尔伯特。