使用networkx和numpy模拟马尔可夫链

问题描述 投票:0回答:1

我的目标是使用

networkx
numpy
模拟马尔可夫链。我写了下面的代码

import numpy as np
import networkx as nx


states = [
    'distance',
    'strike',
    'knockout'
]


transition_matrix = np.array([
    [0.85, 0.15, 0],
    [0.98, 0, 0.02],
    [0, 0, 1]
])


def create_graph(T: np.ndarray) -> nx.DiGraph:
    G = nx.DiGraph()
    G.add_nodes_from(states)

    for i, u in enumerate(states):
        for j, v in enumerate(states):
            p = T[i][j]

            if p > 0:
                G.add_edge(u, v, p=p)

    return G



G = create_graph(T=transition_matrix)

基本上,有两个战士站在对方面前。它们以

0.85
的概率四处移动,并以
0.15
的概率互相攻击。罢工导致击倒的概率是
0.02
。淘汰赛是一种引人入胜的状态,并结束战斗。

模拟战斗并跟踪状态的最佳/最快方法是什么?所以理想情况下,我希望我的输出如下所示:

['距离', '距离', '距离', '距离', '打击', '距离', ...、‘距离’、‘打击’、‘淘汰’]

python numpy networkx markov-chains
1个回答
0
投票

我不可以发表评论,所以我需要写在这里。

他们轮流战斗,还是你想要“平行”战斗?

© www.soinside.com 2019 - 2024. All rights reserved.