马尔可夫性质(Markov property)

一、什么是马尔可夫性质

马尔可夫性质(Markov property):指一个随机过程中当前状态的概率分布,只与前一个状态有关,而与之前的状态序列无关。

假设 {X_{t} : t ∈ T} 是一个随机过程,其中 X_{t} 是在时刻 t 的状态,T 是时间集合。

那么,对于任意时刻 t 和任意状态 i、j 以及任意时刻 s < t,马尔可夫性质可以表述为:

P\left (X _{t+1} = j|X_{t}= i,X_{t-1}=i_{t-1},...,X_{0}=i_{0}\right )=P\left ( X_{t+1} =j|X_{t}=i\right )

给定当前时刻的状态,未来时刻的状态只与当前时刻的状态相关,而与过去时刻的状态无关。 

二、什么是马尔可夫链

马尔可夫链(Markov chain):一个满足马尔可夫性质的随机过程,即给定当前状态的条件下,未来状态的概率分布仅依赖于当前状态,而与过去状态无关。具体来说,马尔可夫链是指一个状态空间和状态转移概率的序列,其中状态的转移满足马尔可夫性质。

 平稳分布(收敛性):如果一个马尔可夫链具有平稳分布,那么在经过足够长的时间后,其状态将趋于一个固定的分布。马尔可夫链是否有平稳分布与其转移概率矩阵的性质有关。

三、马尔科夫链的状态转移矩阵代码例子

sample1:天气模型

import numpy as np

# 定义状态空间和转移概率矩阵
states = ['Sunny', 'Cloudy', 'Rainy']
transition_matrix = np.array([
    [0.7, 0.2, 0.1],
    [0.3, 0.4, 0.3],
    [0.5, 0.3, 0.2]
])

# 计算平稳分布
def stationary_distribution(transition_matrix):
    eigenvalues, eigenvectors = np.linalg.eig(transition_matrix.T)
    stationary_vector = np.real_if_close(eigenvectors[:, np.isclose(eigenvalues, 1)])
    stationary_vector = stationary_vector[:, 0] / np.sum(stationary_vector[:, 0])
    return stationary_vector

# 打印每一轮计算的过程
def print_iteration(iteration, dist):
    print(f"Iteration {iteration}:")
    for i in range(len(states)):
        print(f"状态 {states[i]} 的概率为 {dist[i]:.4f}")

# 初始化平稳分布
stationary_dist = np.ones(len(states)) / len(states)

# 打印初始状态
print("初始状态:")
print_iteration(0, stationary_dist)

# 迭代计算平稳分布
tolerance = 1e-5
max_iterations = 1000
for iteration in range(1, max_iterations + 1):
    new_stationary_dist = np.dot(stationary_dist, transition_matrix)
    print_iteration(iteration, new_stationary_dist)
    if np.allclose(new_stationary_dist, stationary_dist, atol=tolerance):
        print("达到平稳分布,迭代结束。")
        break
    stationary_dist = new_stationary_dist
else:
    print("未达到平稳分布,迭代次数达到最大值。")

# 打印平稳分布
print("平稳分布:")
for i in range(len(states)):
    print(f"状态 {states[i]} 的概率为 {stationary_dist[i]:.4f}")

三种天气状态:晴天(Sunny)、多云(Cloudy)和雨天(Rainy),运行上面的代码,会打印出状态转移矩阵,其中每一行表示从一个状态到所有其他状态的转移概率。

运行结果如下:

马尔可夫链具有平稳分布性质,可以看到在多次迭代后,各个状态的概率将趋于平稳分布。

平稳分布:
状态 Sunny 的概率为 0.5571
状态 Cloudy 的概率为 0.2714
状态 Rainy 的概率为 0.1714
 

sample2:投掷两枚骰子游戏

投掷两枚骰子游戏:每个骰子有六个面,分别标记为1到6。将状态定义为两枚骰子的点数之和,范围从2到12。状态转移矩阵的每个元素表示从一个状态转移到另一个状态的概率。

import numpy as np

# 定义状态空间
states = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

# 初始化转移概率矩阵
transition_matrix = np.zeros((len(states), len(states)))

# 计算状态转移概率
for i in range(len(states)):
    for j in range(len(states)):
        # 计算两枚骰子点数之和为当前状态和下一个状态的概率
        dice_1 = np.arange(1, 7)
        dice_2 = np.arange(1, 7)
        transition_matrix[i, j] = np.sum((dice_1 + dice_2) == states[j]) / 36

# 打印状态转移矩阵
print("状态转移矩阵:")
for i in range(len(states)):
    for j in range(len(states)):
        print(f"从状态 {states[i]} 转移到状态 {states[j]} 的概率为 {transition_matrix[i][j]:.4f}")

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值