我正在蒙特卡洛(Monte Carlo)课程中做家庭作业,被要求找到具有6个州的马尔可夫链矩阵,即 0、1、2、3、4、5 这样,在经过足够长的时间后,我们花费的时间与数字成正比 5、10、5、10、25、60 在每个州。
我看到这是如果我们有转换矩阵就得到的平稳向量。我必须使用Metropolis算法,但是我发现的所有解释和示例均基于Metropolis-Hasting算法。
我拥有的算法的伪代码:
e_mod
我正在寻找逐步的解释,说明如何针对给定的问题(最好是在python中)实现该算法!
答案 0 :(得分:1)
计算马尔可夫链的平稳分布的标准方法是线性方程的解,例如如此处https://stephens999.github.io/fiveMinuteStats/stationary_distribution.html所述。 反过来,您的问题的解决方案相同-解决相同的方程式,不同的是,您的情况是平稳分布的,但没有转移概率/比率。
但是,这种方法的问题是,您可能会构建一个线性方程组,其变量比方程组多得多。这极大地减少了您对已构造的马尔可夫链的拓扑的选择。 幸运的是,您似乎对构造的马尔可夫链的拓扑没有任何限制,因此可以做出一些折衷。您可以做的就是停用大多数转换,即为它们提供零概率/速率,并且每个状态仅启用一个转换。这可能会产生某种环形拓扑,但应确保您的线性方程组具有解。
考虑平稳分布 Pi =(x = 1/3,y = 1/3,z = 1/3)
将线性方程组构建为
Pi(x) = 1/3 = Pr(y,x) * Pi(y)
Pi(y) = 1/3 = Pr(z,y) * Pi(z)
Pi(z) = 1/3 = Pr(x,z) * Pi(x)
在这种情况下,解为 Pr(y,x)= Pr(z,y)= Pr(x,z)= 1 ,然后获得马尔可夫链从 x 到 z 到 y >并以1的概率返回到 x 。 注意,拟合解的数量可以是无限的(即使对于示例中所示的线性方程组的简化系统而言)也可以是无限的。在这种情况下,概率/比率可以是任何正值,只要它们都相等即可。