[英]Markov Chain: Finding terminal state calculation
我正在努力解决这个问题。 希望有人能告诉我如何完成这个。 我查阅了以下页面,但我无法在 java/python 中编写产生正确输出并通过所有测试用例的代码。 我很感激任何和所有的帮助。
编写一个函数 answer(m) ,它接受一个非负整数数组,表示该状态进入下一个状态的次数,并为每个终止状态返回一个整数数组,给出每个终止状态的确切概率,表示为每个状态的分子,然后是所有状态最后和最简单形式的分母。 矩阵最多为 10 x 10。可以保证无论矿石处于哪种状态,都存在从该状态到终端状态的路径。 也就是说,处理总是最终以稳定状态结束。 矿石从状态 0 开始。在计算过程中,分母将适合一个有符号的 32 位整数,只要分数被有规律地简化。 例如,考虑矩阵 m:
[
[0,1,0,0,0,1], # s0, the initial state, goes to s1 and s5 with equal probability
[4,0,0,3,2,0], # s1 can become s0, s3, or s4, but with different probabilities
[0,0,0,0,0,0], # s2 is terminal, and unreachable (never observed in practice)
[0,0,0,0,0,0], # s3 is terminal
[0,0,0,0,0,0], # s4 is terminal
[0,0,0,0,0,0], # s5 is terminal
]
So, we can consider different paths to terminal states, such as:
s0 -> s1 -> s3
s0 -> s1 -> s0 -> s1 -> s0 -> s1 -> s4
s0 -> s1 -> s0 -> s5
Tracing the probabilities of each, we find that
s2 has probability 0
s3 has probability 3/14
s4 has probability 1/7
s5 has probability 9/14
我不确定边缘情况的结果应该是什么,但我为这个问题所做的是:
旁注:
我知道这是一个有点老的话题,但也许有人会感兴趣。
就我而言,这个 PDF 对我帮助很大: https : //math.dartmouth.edu/archive/m20x06/public_html/Lecture14.pdf
该算法易于实现。
正如 Ana 所说,您需要对矩阵进行排序,请记住同时对行和列进行排序以获得正确的结果。
关于边缘情况:
如果您从唯一的一个状态开始,1x1 总是 100%,并且它必须终止,因为没有其他状态。
如果只有一个非终止状态,则结果将与这一行相同。 无需计算。
Ana 的回答中的最后两个边缘情况(我认为应该接受)不是边缘情况,坦率地说,它们是常规情况,因此您需要正常计算答案。
作为一种替代方法,可以考虑使用恩格尔吸收马尔可夫链的算法来计算吸收概率。 这不需要矩阵求逆/线性系统解决方案,因此不需要有理数算法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.