r - R 中的IGRAPH : Find the path between vertices that maximizes the product of edge attributes

标签 r probability shortest-path igraph

我需要找到一种方法来找到两个顶点之间的路径,使边属性的乘积最大化。就我而言,边缘属性是连接的概率。 假设我想在以下示例中找到顶点 1 和 4 之间的最大概率路径:

require(igraph)    
G<-graph.data.frame(as.data.frame(cbind(id1=c(1,1,2,3,1,4),id2=c(2,3,4,4,5,5),weight=c(0.5,0.35,0.5,0.9,0.6,0.6))), directed=FALSE)

plot(G, edge.label=paste(E(G),"=",signif(E(G)$weight, digits=1)), vertex.size=10)

#weighted shortest path using connection probability
a<-get.shortest.paths(G,1,4, weights=E(G)$weight, output="epath")[[1]]
E(G)[a]
prod(E(G)$weight[a])

#weighted shortest path using the inverse of connection probability
b<-get.shortest.paths(G,1,4, weights=1-E(G)$weight, output="epath")[[1]]
E(G)[b]
prod(E(G)$weight[b])

在此示例中,最大化连接的路径是通过顶点 5,实际上概率的乘积等于 0.36 (0.6*0.6)。 最短路径函数似乎优先考虑属性之和,而不是乘积。事实上,在上面的例子中,无论我使用概率还是概率的倒数,它都会建议两条连接概率较低的路径(0.25和0.315)。

有没有办法找到最大化产品的路径??? 谢谢

最佳答案

您正在使用最短路径算法来获得最长路径。所以反转权重是必要的。同时,您想要最大化产品而不是总和。结合-

x<-get.shortest.paths(G,1,4, weights=-log(E(G)$weight), output="epath")[[1]]
E(G)[x]
prod(E(G)$weight[x])

关于r - R 中的IGRAPH : Find the path between vertices that maximizes the product of edge attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16032499/

相关文章:

r - R的pgeom函数不正确吗?

python - 识别一个数据集中的单独正态分布

database - 图数据库更适合最短路径算法吗?

algorithm - 具有平行边和自循环的 Dijkstra

algorithm - 访问某些节点的网格图的最短路径算法

r - 在R中澄清L

r - 当保留高阶参数时,如何删除模型中的低阶参数?

r - 动态构建查找多列的调用

R:通过 Bloomberg API 请求价格信息

algorithm - 以等概率在 NxN 板上随机标记 M 个单元格