You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

满足收敛假设的马尔可夫链城市车辆出行建模不收敛问题求助

问题原因分析
  • 转移矩阵不符合马尔可夫链基本约束,每行概率和不为1。经校验你提供的转移矩阵第一行求和仅为0.87,第六行求和为1.298,不满足转移矩阵每行元素和为1的要求,这是无法得到正确稳态的核心原因。
  • 迭代逻辑未设置收敛判定条件,仅固定迭代10000次无法确认是否达到稳态,也可能因数值误差导致结果漂移。
修复方案

首先需要对原始转移矩阵做行归一化,确保每行的元素和为1,再优化迭代逻辑增加收敛判定,修正后的参考代码如下:

import numpy as np

# 原始转移矩阵
T = np.array([[0.772,0.044,0.001,0.026,0.026,0.001],
             [0.114,0.760,0.183,0.026,0.022,0.007],
             [0.001,0.112,0.447,0.055,0.056,0.008],
             [0.057,0.028,0.157,0.473,0.022,0.001],
             [0.055,0.042,0.184,0.394,0.556,0.072],
             [0.001,0.014,0.026,0.028,0.318,0.911]]).reshape(6,6)

# 行归一化修正转移矩阵
T = T / T.sum(axis=1, keepdims=True)

# 初始状态矩阵
A1 = np.array([0.086,0.180,0.086,0.078,0.219,0.350]).reshape(6,1)

forw = A1
threshold = 1e-8  # 收敛阈值
max_iter = 10000
i = 0

while i < max_iter:
    next_state = np.dot(T, forw)
    # 判定是否收敛
    if np.linalg.norm(next_state - forw) < threshold:
        print(f"迭代{i}次后达到稳态")
        break
    forw = next_state
    i += 1

steady_state = forw.flatten()
print("稳态分布:", steady_state)
print("稳态分布和校验:", steady_state.sum())

你也可以通过特征值法直接求解稳态分布,效率更高:

eigenvalues, eigenvectors = np.linalg.eig(T.T)
# 找到最接近1的特征值对应的特征向量
steady_idx = np.argmin(np.abs(eigenvalues - 1))
steady_state = eigenvectors[:, steady_idx].real
# 归一化保证和为1
steady_state = steady_state / steady_state.sum()
print("特征值法求解的稳态分布:", steady_state)

内容的提问来源于stack exchange,提问作者Fillip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:03