【发布时间】:2018-03-19 11:55:27
【问题描述】:
我一直在构建一个递归函数,最好通过一个简单的例子来说明。
采用具有 2 个状态,状态 1 和状态 2 的马尔科夫过程。符号 p_ij 表示在当前状态为 的情况下转换到状态 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 个时间段之后的状态为 n 的概率em>j,假设当前状态是i。 r_ij(n) 可以使用 Chapman-Kolmogorov 方程找到,
有初始条件
m 是状态的总数。 [来自 Bertsekas/Tsitsiklis,2008 年。]
我正在尝试构建 r_ij(n)。前 5 个步骤应如下所示:
我的开始:
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]]
但是我对这个符号有点迷茫。
【问题讨论】:
-
你已经有了一个好的开始。当您定义
pij = np.array([[.8, .2], [.6, .4]])时,更自然的标识符应该是p。类似地,rij应该是r。您的定义说 3 个循环:在 i、j、k 上,但您只在 k 上编写了一个循环。请注意,您使用的是单下标,其中双下标(如p[k, j])是合适的。