R中的iGraph的random_walk函数不会停留在吸收状态

时间:2018-02-07 19:25:08

标签: r graph markov-chains random-walk

我试图使用R来模拟随机游走/马尔可夫链。你可以看到我设置了一个转换矩阵,然后我试图在这个上运行一个随机游走。这里的事情是当随机游走者遇到吸收状态(如2和5)时不停止但继续跑步。

我是否使用了错误的功能来处理这样的问题或者其他地方存在问题?实际上我想要实现的是打印出沃克所访问的顶点。

library(igraph)

# Produce a transition matrix.
tm <- read.table(row.names=1, header=FALSE, text="
1 0.2 0.3 0.1 0.2 0.1 0.1 
6 0.3 0.2 0.4 0.1 0 0 
3 0 0.2 0.4 0.1 0.2 0.1 
4 0.2 0.1 0.2 0.3 0.1 0.1
5 0 0 0 0 1 0
2 0 0 0 0 0 1")

tm<-as.matrix(tm)
row.names(tm) <- c(1,6,3,4,5,2)
colnames(tm) <- c(1,6,3,4,5,2)

g1 <- graph.adjacency(tm, mode="undirected", weighted=TRUE)

random_walk( graph = g1, start = '4', steps = 100, stuck = "error" )

输出示例:

 [1] 4 5 3 4 4 4 3 3 2 2 4 4 2 2 3 4 4 5 5 3 5 5 3 6 3 3 3 4 4 4 6 4 4 4 4 2 2 4 3 6 3 2 2 2 4 1
 [47] 4 3 4 1 1 4 2 3 6 6 6 6 4 3 6 6 6 3 5 5 3 5 5 5 3 1 1 3 2 4 4 2 1 1 1 2 3 1 2 1 1 2 2 1 5 3
 [93] 5 4 4 2 4 3 4 4

正如你所看到的那样,它不会在2或5时停止。

1 个答案:

答案 0 :(得分:0)

如果您认为这些状态正在吸收,那么您按照指示解释您的邻接图,而不是无向。使用mode="directed"。然后,当您绘制图形时,您将看到循环更好地指示您可以移动的位置(注意不再有任何行导出节点2的“out”)。

enter image description here