离散马尔科夫链的平稳分布的两种解法
假设离散马尔科夫链的转移矩阵为PPP,平稳分布为π\piπ,则平稳分布满足:Pπ=πP\pi=\piPπ=π迭代法求平稳分布的一种简单方法是迭代法,即随机初始化初始分布π0\pi_0π0,利用上式不断迭代求解下一时刻的状态分布直到状态分布收敛,则求得平稳分布。"""通过markov_marix迭代得到`平稳分布`. """pi0 = zeros(num)pi0[0] = 1pi = ...
假设离散马尔科夫链的转移矩阵为 P P P,平稳分布为 π \pi π,则平稳分布满足: P π = π P\pi=\pi Pπ=π
迭代法
求平稳分布的一种简单方法是迭代法,即随机初始化初始分布 π 0 \pi_0 π0,利用上式不断迭代求解下一时刻的状态分布直到状态分布收敛,则求得平稳分布。
"""通过markov_marix迭代得到`平稳分布`. """
pi0 = zeros(num)
pi0[0] = 1
pi = list([pi0])
for i in range(200):
print('epoch %02d' % (i+1), pi[-1])
pi.append(markov_marix.dot(pi[-1]))
if sum(abs(pi[-1]-pi[i])) <= 1e-7:
print('break...', pi[-1])
break
steady_vec = pi[-1] # 平稳分布
print('平稳分布:', steady_vec)
特征分解法
另一种解法是利用特征分解,由于平稳分布满足 P π = π P\pi=\pi Pπ=π,与特征方程 A x = λ x Ax=λx Ax=λx联系可知平稳分布 π π π就是转移矩阵 P P P的特征值为1对应的特征向量(归一化),因此可以直接对转移矩阵进行特征分解来求平稳分布。
"""特征分解求平稳分布. """
values, vecs = eig(markov_marix,)
for i in range(len(values)):
if abs(values[i]-1) <= 1e-9:
print(values[i])
print(vecs[:, i]/sum(vecs[:, i]))
模拟结果如下,两种方法求得平稳分布一致
更多推荐
所有评论(0)