簡體   English   中英

如何在R中使用igraph根據某些邊緣屬性找到兩個節點之間的最短路徑?

[英]How to find shortest paths between two nodes based on certain edge attribute using igraph in R?

我已經使用igraph包在Rstudio中制作了有向圖。 我為每個邊緣設置了一個名為edge_ids的邊緣屬性。 多個邊具有相同的edge_id。 現在,我想查找兩個具有特定edge_id的節點之間是否存在路徑?

因此,基本上,假設我有一張圖表,其中包含10輛車,每輛車都有自己的vehicle_id。 現在,如果我想在該圖中找到2個節點之間的最短距離,則它將考慮所有10輛車,但是我想要的是,它應僅考慮其車輛信息將由我給定的那輛車。

shortest.paths(total_network, 'ttn85jv', 'ttn9rjy')
E(total_network)[edge_id=="0358511023767613_132.csv"]

第一行將為我提供節點ttn85jv和ttn9rjy之間的最短路徑。 第二行將為我提供邊緣ID為= 0358511023767613_132.csv的邊緣序列向量。

如果邊緣id = 0355851023767613_132.csv在(total_network)圖中創建了一條路徑,那么我想查找節點ttn85jv和ttn9rjy是否在該路徑之間。

如果路徑中同時存在兩個節點,那么對於該id,這兩個節點之間的路徑長度是多少(0358511023767613_132.csv)

我有一個答案。 但這不是最佳方法,而且執行時間也很長,因為首先要制作給定圖的子圖(total_network)。

s1 <- subgraph.edges(total_network, E(total_network)[edge_id=="0358511023767613_132.csv"])
shortest.paths(s1,'ttn9rjy','ttn85jv')

你已經提供一個有效的解決你的問題,但Tthere 更快的方式subgraph.edges()檢查由邊緣-ID的邊緣。

例如,嘗試將n <- make_empty_graph(n = length(V(total_network)))為一個空網絡,然后使用以下方法查找距離:

#s1 <- subgraph.edges(total_network, E(total_network)[edge_id=="0358511023767613_132.csv"])
s1 <- n %>% add_edges( as.vector(ends(total_network, E(total_network)[edge_id=="0358511023767613_132.csv"])) )

我的版本可以更快地創建子圖。 在我的2017 Mac上,速度優勢似乎約為2倍,但取決於網絡大小。 也許優勢對於您的網絡規模是不同的?

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM