马尔科夫链在城市规划领域有广泛的运用,马尔科夫链是一个随机过程,其中每个状态的出现只依赖于前一个状态。我们可以使用一系列数学公式来描述它。
定义
考虑一个离散时间、离散状态空间的随机过程{Xn},其中n是非负整数,表示时间,而Xn是在时间n的状态。如果对于所有的 n、所有的状态i,j,k,... 和所有的时间序列s1,s2,s3...sn-1,以下条件满足:
那这个随机过程是一个马尔科夫链。
转移概率
上面的条件可以用转移概率矩阵 P 来描述。矩阵的每一个元素 Pij表示从状态 i 转移到状态 j 的概率
注意,转移概率矩阵的每一行的和为 1 ,这是因为它描述了从一个特定状态转移到其他所有可能状态的概率。
n-step 转移概率
考虑从状态 i 转移到状态 j 经过 n 步的概率。这可以通过计算转移概率矩阵的 n 次方来得到:
其中 P(n) 是 P 的第 n 次幂。
稳态分布
对于一些马尔科夫链,当 n 趋近于无穷大时,n-step 转移概率会收敛到一个稳定的分布。如果存在这样的分布 π ,那么对于所有的状态 i 和 j ,有:
且满足 πP = π ,其中 π 是一个行向量。这是马尔科夫链的基本概念。在实际应用中,还需要考虑诸如可达性、周期性、遍历性等。
简单Python实现
基于马尔科夫链模型预测天气,假设我们只考虑两种天气:晴天(S)和雨天(R)。我们根据过去的数据得到以下转移概率: ①当前是晴天时,明天仍然是晴天的概率是 0.9;明 天 变 成 雨 天 的 概 率 是 0.1 。②当前是雨天时,明天仍然是雨天的概率是 0.5 ;明天变成晴天的概率是 0.5 。基于这些数据,我们可以建立转移概率矩阵 P :
下面是简单的代码实现:
import numpy as np def markov_predict(start_state, days): #定义初始状态和预测日期 # 建立概率转移方程 P = np.array([[0.9, 0.1], [0.5, 0.5]]) # 状态映射 states = ["Sunny", "Rainy"] current_state_id = states.index(start_state) #状态列表 forecast = [start_state] for _ in range(days-1): # 从当前开始的5天天气 next_state_id = np.random.choice([0,1],p=P[current_state_id]) #"p=P[current_state_idx]"是整个算法的核心 forecast.append(states[next_state_id]) current_state_id = next_state_id return forecast
到这里模型已经构建好了,接下来预测:
# 预测 for _ in range(5): print(markov_predict("Rainy",5)) # 初始状态为雨天,预测未来五天的状态
可以看到我重复进行了五次预测,返回的结果如下:
['Rainy', 'Sunny', 'Sunny', 'Sunny', 'Sunny'] ['Rainy', 'Rainy', 'Rainy', 'Sunny', 'Sunny'] ['Rainy', 'Sunny', 'Sunny', 'Sunny', 'Sunny'] ['Rainy', 'Rainy', 'Sunny', 'Sunny', 'Sunny'] ['Rainy', 'Rainy', 'Rainy', 'Rainy', 'Sunny']
除了第一次和第三次的结果,其他几次都是不一样的,这是因为马尔可夫链模型具有随机性。
到这里就是马尔科夫链模型的基本概念全部内容。马尔科夫链在城市规划领域中人口土地预测、区域趋同性等方面有广泛应用,还衍生出空间马尔科夫链模型(主要是引入了空间权重矩阵)。
城市规划拓展阅读:
[1] 陈培阳,朱喜钢.中国区域经济趋同:基于县级尺度的空间马尔可夫链分析[J].地理科学,2013,33(11):13021308.
[2] 蒲英霞,马荣华,葛莹等.基于空间马尔可夫链的江苏区域趋同时空演变[J].地理学报,2005(05):817-826.