gpt4 book ai didi

python - 转移概率的递归函数(查普曼-柯尔莫哥洛夫方程)

转载 作者:行者123 更新时间:2023-12-01 02:32:39 24 4
gpt4 key购买 nike

我一直致力于构建一个递归函数,最好通过一个简单的示例来说明。

采用具有 2 个状态(状态 1 和状态 2)的马尔可夫过程。符号 p_ij 表示在当前状态为 j 的情况下转换到状态 j 的概率>我。在此示例中,

  • p_11 = 0.8(在当前状态为状态 1 的情况下,停留在状态 1 的概率)
  • p_12 = 0.2
  • p_21 = 0.6
  • p_22 = 0.4

转移概率矩阵为:

import numpy as np
pij = np.array([[.8, .2], [.6, .4]])
print(pij)
# [[ 0.8 0.2]
# [ 0.6 0.4]]

n 步转移概率,表示为 r_ij(n),表示 n 时间段后状态将< em>j,假设当前状态是ir_ij(n) 可以使用 Chapman-Kolmogorov 方程找到,

enter image description here

初始条件

enter image description here

m 是状态总数。 [摘自 Bertsekas/Tsitsiklis,2008 年。]

我正在尝试构建r_ij(n)。前 5 个步骤应如下所示:

enter image description here

我的开始:

def r(p, n):
m = np.sqrt(p.size) # or p.shape[0]
if n == 1:
return p
elif n > 1:
res = []
for k in range(m):
for i in p:
for j in i:
# This line is patently wrong...
# Not sure how to reference i
return r(n - 1) * p[k, j]
return np.sum(res)

p0 = np.array([[.8, .2], [.6, .4]])
print(r(p0, n=5))
# [[.7501, .2499],
# [.7498, .2502]]

但是我对这个符号有点迷惑。

最佳答案

为此您不一定需要递归函数。 matrix_power 本质上是您正在寻找的 rij:

def rij(pij, n):
return matrix_power(pij, n)
<小时/>
pij = np.array([[.8, .2], [.6, .4]])

from numpy.linalg.linalg import matrix_power

matrix_power(pij, 2)
#array([[ 0.76, 0.24],
# [ 0.72, 0.28]])

matrix_power(pij, 3)
#array([[ 0.752, 0.248],
# [ 0.744, 0.256]])

matrix_power(pij, 4)
#array([[ 0.7504, 0.2496],
# [ 0.7488, 0.2512]])

matrix_power(pij, 5)
#array([[ 0.75008, 0.24992],
# [ 0.74976, 0.25024]])
<小时/>

要定义递归函数,np.dot 将使任务变得更容易:

def rij(pij, n):
if n == 1:
return pij
else:
return np.dot(rij(pij, n-1), pij)

rij(pij, 5)
#array([[ 0.75008, 0.24992],
# [ 0.74976, 0.25024]])

关于python - 转移概率的递归函数(查普曼-柯尔莫哥洛夫方程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com