我们假设一个简单的图表:
[1] - (3) - > [3]&lt ;-( 2) - [2]
> library(igraph)
> df0 <- data.frame(i=c(1,2),j=c(3,3),w=c(3,2))
> g0 <- graph.data.frame(df0, directed=TRUE)
现在我想计算从[1]到[2]和从[2]到[1]的费用。
> E(g0, path=c(2,3,1), directed=FALSE)$w
[1] 2 3
> E(g0, path=c(1,3,2), directed=FALSE)$w
[1] 3 2
但我希望边缘方向发挥作用。路径方向的边缘意味着正成本,而相反方向的边缘则是负成本。
在我旅行的例子中
是否有一种简单的方法或任何方式来计算二进制向量,该向量指示从节点A到节点B的路径的边缘方向?
旁注:
一种可能的解决方案是简单地添加两个带有权重w和-w每个链接的有向边。有时候简单地直接确定方向并且计算上并不过于昂贵的方式也是有用的。
答案 0 :(得分:0)
我有兴趣看看是否有更好的方法,但这就是我想出的。
cost132<-ifelse(get.edge.ids(g0,c(1,3, 3,2),directed=T)>0,1,-1)
sum(cost132 * E(g0, path=c(1,3,2), directed=FALSE)$w)
[1] 1
# for the opposite path, switch the coordinate pairs in the get.edge.ids functions
cost231<-ifelse(get.edge.ids(g0,c(2,3, 3,1),directed=T)>0,1,-1)
sum(cost231 * E(g0, path=c(2,3,1), directed=FALSE)$w)
[1] -1
在我看来,给定一条路径,人们应该能够找到与路径上每条边相关的方向,但我找不到一种简单的方法来做到这一点。