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

基于泊松过程的连续时间马尔可夫链状态10转至17的概率可计算吗?

连续时间马尔可夫链(CTMC)状态转移概率计算问题

核心结论

从状态[10]跳转至状态[17]的概率完全可以计算,具体方法取决于你要计算的是「固定时间窗口内的瞬态转移概率」还是「最终到达状态17的吸收概率」。

问题拆解

你描述的是一个生灭过程:状态对应系统用户数(10到17),新用户到达速率为λ,每个用户的离开速率为μ(因此n个用户时的总离开速率为nμ)。你提到的「新增7个用户到达的概率」需要明确场景:

  • 场景1:在固定时间t内,系统从10个用户增长到17个用户的概率(期间可能有用户离开,但最终状态为17);
  • 场景2:系统从10个用户出发,最终到达17个用户且不再回到更低状态的概率(需将17设为吸收态,比如系统容量上限为17)。

现有代码的问题

你提供的代码仅定义了两状态的CTMC,完全不符合你描述的10到17的多状态场景,且存在冗余计算:

  • 速率矩阵Q仅包含两个状态,无法表示用户数10到17的转移关系;
  • matrix_power(np.exp(Q * t), 1)是多余操作,矩阵的1次方等于自身;
  • 求解平稳分布的代码与你的需求无关,你需要的是瞬态转移概率或吸收概率,而非稳态分布。

修正实现示例

场景1:固定时间t内的瞬态转移概率

通过构建对应8个状态(10到17)的速率矩阵,计算矩阵指数得到转移概率矩阵,进而提取目标概率:

import numpy as np

lambda_ = 1  # 用户到达速率
mu = 1/60    # 单个用户的离开速率

# 状态映射:0→10, 1→11, ..., 7→17
num_states = 8
Q = np.zeros((num_states, num_states))

# 填充速率矩阵Q
for i in range(num_states):
    current_user_count = 10 + i
    leave_rate = current_user_count * mu  # 当前总离开速率
    arrive_rate = lambda_ if i < num_states - 1 else 0  # 最高状态无到达
    
    # 对角元:总转出速率的负值
    Q[i, i] = - (arrive_rate + leave_rate)
    # 转移到用户数+1的状态
    if i < num_states - 1:
        Q[i, i+1] = arrive_rate
    # 转移到用户数-1的状态
    if i > 0:
        Q[i, i-1] = leave_rate

# 初始状态:从10个用户出发(对应状态0)
initial_dist = np.zeros(num_states)
initial_dist[0] = 1.0

t = 10.0  # 目标时间窗口
# 计算t时刻的转移概率矩阵
transition_matrix = np.linalg.matrix_exp(Q * t)
# 提取从状态0到状态7的概率
target_prob = initial_dist.dot(transition_matrix)[7]

print(f"时间t={t}内,从10个用户增长到17个用户的概率:{target_prob:.6f}")

场景2:最终到达17的吸收概率

将状态17设为吸收态(到达后不再转移),通过求解线性方程组得到吸收概率:

import numpy as np

lambda_ = 1
mu = 1/60
num_states = 8  # 0→10到7→17

# 构建线性方程组:对于非吸收态i,方程为 sum(Q[i,j]*p_j) = 0,p_7=1
A = np.zeros((num_states-1, num_states-1))
b = np.zeros(num_states-1)
b[-1] = -lambda_  # 状态6(原16)的方程整理后对应项

for i in range(num_states-1):
    current_users = 10 + i
    leave_rate = current_users * mu
    arrive_rate = lambda_
    
    A[i, i] = arrive_rate + leave_rate
    if i > 0:
        A[i, i-1] = -leave_rate
    if i < num_states-2:
        A[i, i+1] = -arrive_rate

# 求解p0到p6(对应从10到16出发最终到17的概率)
absorb_probs = np.linalg.solve(A, b)
# p0就是从10出发最终到17的概率
target_absorb_prob = absorb_probs[0]

print(f"从10个用户出发,最终到达17个用户的概率:{target_absorb_prob:.6f}")

关于s变换法的补充

一阶导数的拉普拉斯变换法确实可用于生灭过程的转移概率求解,但针对多状态场景手动推导方程会非常繁琐,数值方法(矩阵指数、线性方程组求解)在工程实现上更高效可行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:47:32