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

如何使用Numpy的linalg.solve求解转移矩阵对应的获胜概率方程组

用numpy求解马尔可夫吸收态获胜概率

np.linalg.solve的使用前提是将方程组整理为标准线性代数形式 Ax = b:其中A为未知数的系数矩阵,x为所有未知数列向量,b为常数项列向量。你可以按以下步骤操作:

  1. 代入已知条件:吸收态(0,2,3,0)的获胜概率为固定值1,将该值代入剩余三个方程,把所有未知数移到等号左侧,常数项移到等号右侧。
  2. 为简化表达,对三个非吸收态的获胜概率做如下命名:
  • x₁ = 状态(2,2,3,0)的获胜概率
  • x₂ = 状态(2,2,2,0)的获胜概率
  • x₃ = 状态(2,2,1,0)的获胜概率
  1. 整理后得到标准形式的方程组:
0.7x₁ - 0.2x₂ + 0x₃ = 0.5
-0.3x₁ + x₂ - 0.2x₃ = 0.5
-0.5x₁ + 0x₂ + x₃ = 0.5

完整求解代码

import numpy as np

# 构造系数矩阵A
A = np.array([
    [0.7, -0.2, 0],
    [-0.3, 1, -0.2],
    [-0.5, 0, 1]
])

# 构造常数项向量b
b = np.array([0.5, 0.5, 0.5])

# 求解方程组
x1, x2, x3 = np.linalg.solve(A, b)

# 汇总所有状态的获胜概率
states = [(0,2,3,0), (2,2,3,0), (2,2,2,0), (2,2,1,0)]
p_win = {
    states[0]: 1.0,
    states[1]: x1,
    states[2]: x2,
    states[3]: x3
}

# 输出结果
for state, prob in p_win.items():
    print(f"状态{state}的获胜概率:{prob:.4f}")

输出结果

状态(0, 2, 3, 0)的获胜概率:1.0000
状态(2, 2, 3, 0)的获胜概率:1.0000
状态(2, 2, 2, 0)的获胜概率:1.0000
状态(2, 2, 1, 0)的获胜概率:1.0000

该结果符合你构造的转移矩阵特性:没有其他吸收态,所有路径最终都会抵达获胜的吸收态,因此所有初始状态的获胜概率均为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:06:00