数学建模【马尔科夫预测】

本文介绍了马尔科夫模型的基本概念,如其在健康状况预测、销售与库存管理、等级结构中的应用,重点讲解了一步转移矩阵和n步概率分布的计算方法。马尔科夫预测区别于其他预测模型,强调基于当前状态的未来预测,以及如何根据问题特性判断是否适合使用此模型。

一、马尔科夫模型简介

这里通过一个例子引出马尔科夫模型。

大学生小魏日常处于以下4种状态之一:睡觉、吃饭、打游戏、看动漫。若已知小魏当前处于某种状态,则他未来的状态只与现在有关,而与过去无关。例如已知昨天小魏在睡觉,现在在吃饭,能影响到明天的只有今天的“吃饭”状态。那么明天的状态只与今天的“吃饭”有关,而与昨天的“睡觉”无关。注意,小魏的状态是随机的,只能求明天处于每一种状态的概率,而这概率有只与今天的状态有关,不需要管昨天或更早的状态是什么。描述这种随机现象的模型,称为马尔科夫模型。

从小魏到马尔科夫链

  • 离散时间:小魏的昨天为初始时间n=1,则今天为2,明天为3,以及以后得4,5等
  • 状态空间:小魏处于睡觉状态记为j=1,则处于吃饭、打游戏、看动漫依次记为2,3,4
  • 状态:Xn = j表示第n天小魏处于状态j,例如X3 = 2,表示第3天小魏处于吃饭的状态
  • 马尔科夫链:设{Xn, n = 1, 2, ...}是一个随机序列
  • 假设已知小魏第1天为状态3即X1 = 3;第2天为状态1即X2 = 1;第3天为状态4即X3 = 4;...;第n天为状态2即Xn = 2
  • 那么第n+m天小魏处于状态1的概率:P{Xn+m = 1| Xn = 2, ..., X3 = 4, X2 = 1, X1 = 3} = P{Xn+m = 1| Xn = 2}
  • 即条件概率表达式里,一大堆的条件都是无用的,只有第n天的条件才是有用的
  • 同样的形式可写出第n+1天小魏处于状态2、状态3和状态4的概率计算式

二、适用赛题

健康与疾病

  • 人的健康状态是会随着时间变化的,而变化又是随机的
  • 预测一个人下一年的健康状态,只需要看当前的状态,无需关心过去
  • 可能与优化模型结合,例如保险公司追求收益最大化,需要预测投保人的健康状态

销售与贮存

  • 一些奢侈品例如钢琴,一般销量很小,商店不会贮存太多
  • 钢琴每周的销售量也是随机的,进货贮存过多会积压资金,贮存过少又有可能失去销售机会
  • 商家需要根据一周的销量决定是否进货

等级结构

  • 工程师按照级别分为技术员、助理工程师、中级工程师、副高级工程师和高级工程师
  • 一个人明年的级别也是随机的,无论升级还是降级都只与其当前级别有关
  • 预测下一年的级别变动,也可用马尔科夫预测

此类问题最基本的特点:状态随机,下一阶段的状态只与当前有关

三、模型流程

四、流程分析

1.一步转移矩阵

这里先介绍一个概念:时齐性

若第n天小魏处于状态i,则经过了m天后,小魏处于状态j的概率满足:

        P{Xn+m = j| Xn = i} = Pij(m)

则称{Xn, n = 1, 2, ...}为时齐的马尔科夫链

  • 两种状态转换的概率,只与时间间隔有关,与更早的过去无关,也与起始时刻无关
  • 满足这种条件的马尔科夫链,称为时齐的马尔科夫链
  • 是否满足时齐,是问题本身决定的(查文献),一般带有周期性的问题才会满足时齐,例如销售类问题,可以在论文的模型假设里写“假设销售规律满足时齐性”
  • m = 1时,称Pij(1)为一步转移概率,所有Pij(1)所组成的矩阵为马尔科夫链的一步转移矩阵

假设有x个状态,p为一步转移矩阵,nij为从i转移成j的次数,则有

        

这里小魏的x是4

这样一步转移矩阵就出来了

2.n步后的概率分布

假设该系统初始时4种状态出现的概率为P0 = [0.2, 0.3, 0.3, 0.2]

则系统初始化后,运行到第2步最有可能出现状态几?第5步呢?

这时候就要计算n步后的概率分布了

注意:求“第n步”状态的概率分布,需要根据题目确定究竟是否把“初始化”算作第1步

3.预测

根据问题要求,做出解答

五、补充

1.马尔科夫预测和其他预测有什么不同?
  • 其他预测模型:计算的是“数值”,理论上是无数种可能
  • 马尔科夫预测:计算的是“概率”,需要有限种已知的可能结

例如根据城市近几年的噪声值,预测下一年的噪声值之类的问题。因为“噪声值”是数值,理论上可以是任何实数,所以有无数种可能的结果,此时就不能用马尔科夫预测。

例如根据某销量很小的奢侈品过去几个月的销量,预测下个月销量。某奢侈品的“销量”只能是正整数,又因为“销量很少”可以根据已知数据假定小于某个正整数(例如月销量不超过10),此时“销量”有0到10总共11个可能的结果,可以用马尔科夫预测下个月的销量最有可能是几。

2.马尔科夫预测的重难点
  • 马尔科夫预测计算过程非常简单,没有复杂原理、公式或推导
  • 理解马尔科夫链的核心:未来只与当前有关、与过去无关,以及时齐性
  • 能否用马尔科夫预测,是看问题本身决定的

### 使用Python实现马尔科夫模型进行数学建模预测 #### 创建转移概率矩阵 为了构建一个马尔科夫模型,首先需要定义系统的状态空间并估计各状态下转移到其他状态的概率。这可以通过分析历史数据来完成。 ```python import numpy as np # 定义状态转换表 (假设已知) transition_matrix = np.array([ [0.7, 0.2, 0.1], # Sunny -> Sunny, Cloudy, Rainy [0.3, 0.4, 0.3], # Cloudy -> ... [0.2, 0.3, 0.5] # Rainy -> ... ]) ``` 此代码片段创建了一个表示不同天气条件下相互转变可能性的转移概率矩阵[^2]。 #### 计算未来某时刻的状态分布 给定初始状态向量 `initial_state` 和时间步数 `steps` ,可以利用矩阵幂运算快速获得经过指定时间段后的状态分布: ```python def predict_future_distribution(initial_state, transition_matrix, steps=1): future_dist = np.dot(np.linalg.matrix_power(transition_matrix, steps), initial_state.T).T return future_dist.flatten() # 假设今天是晴天 today_weather = np.array([1., 0., 0.]) predicted_tomorrow = predict_future_distribution(today_weather, transition_matrix) print("Tomorrow's weather prediction:", predicted_tomorrow) ``` 上述函数接受三个参数:当前状态、转移概率矩阵以及想要向前推进的时间单位数量(默认为一天)。这里使用了NumPy库中的`matrix_power()` 函数来进行高效的矩阵乘方操作[^3]。 #### 寻找平稳分布 当系统达到稳定态时,无论起始条件为何种情况,在足够长时间之后都会趋向于相同的最终状态比例——即所谓的“平稳分布”。该过程可通过迭代求解线性方程组或直接调用现成算法解决: ```python from scipy import linalg eigenvalues, eigenvectors = linalg.eig(transition_matrix.T) stationary_distribution = eigenvectors[:, eigenvalues.argmax()].real / sum(eigenvectors[:, eigenvalues.argmax()].real) print("Stationary distribution of the Markov chain is", stationary_distribution) ``` 这段脚本计算出了对应最大特征值的那个右特征向量作为所求得的极限分布[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还有糕手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值