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

四亚稳态马尔可夫状态模型转移矩阵代码正确性求证

亚稳态马尔可夫模型(MSM)转移矩阵计算错误修正

你的代码逻辑存在错误,导致输出的转移矩阵元素超出[0,1]的概率取值范围,问题根源在于对亚稳态转移概率的定义理解偏差:

  • 亚稳态间的转移概率,本质是从亚稳态i中的任意状态出发,一步转移到亚稳态j的加权平均概率,权重是亚稳态i内各状态的稳态概率占i总稳态概率的比例。
  • 你当前用P_i_to_j = pi_i * T_i_to_j.sum()的计算方式,是将亚稳态i的总稳态概率与i到j的所有转移概率元素之和相乘,完全不符合转移概率的定义,必然会出现大于1的结果。

修正后的代码

import numpy as np

nstates = 4
transition_matrix_meta = np.zeros((nstates, nstates))

for i in range(nstates):
    # 获取亚稳态i包含的所有状态索引
    states_i = msm.metastable_sets[i]
    # 计算亚稳态i的总稳态概率
    pi_i = msm.pi[states_i].sum()
    # 生成i内各状态的权重(稳态概率占i总概率的比例)
    weights = msm.pi[states_i] / pi_i
    
    for j in range(nstates):
        # 提取原转移矩阵中i到j的子矩阵
        T_i_to_j = msm.transition_matrix[states_i][:, msm.metastable_sets[j]]
        # 计算i内每个状态到j的转移概率之和(每行的和)
        prob_per_state = T_i_to_j.sum(axis=1)
        # 加权平均得到亚稳态i到j的转移概率
        P_i_to_j = np.dot(weights, prob_per_state)
        transition_matrix_meta[i, j] = P_i_to_j

print(transition_matrix_meta)

验证标准

修正后的矩阵每行元素之和应当等于1,符合概率矩阵的基本要求。如果原MSM的转移矩阵是合法的概率矩阵(每行和为1),那么修正后的亚稳态转移矩阵也会满足每行和为1的条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:45:04