我正在尝试使用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。
最佳答案
如果您认为这些状态正在吸收,则说明您的邻接图是有向的,而不是无向的。使用mode="directed"
。然后,在绘制图形时,您将看到循环更好地指示了可以移动的位置(注意,不再有任何线引出节点2的“出”)。
关于r - R中iGraph的random_walk函数不会在吸收状态下停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48671757/