Как получить самую длинную матрицу потока графа с пакетом r-igraph? - PullRequest
1 голос
/ 13 апреля 2020

Предположим, что я создал случайный граф, используя пакет igraph:

n=6  # number of vertices 
F <- erdos.renyi.game(n, p.or.m=0.7, directed=FALSE)
m=ecount(F)
min = 1    # 1 km
max = 50   # 50 km 
F <- set.edge.attribute(F, name="distance", value=runif(m , min , max))
plot(F, layout=layout.fruchterman.reingold)
distances(F)
distances(F, weights = E(F)$distance)
distances(F, v = 1, to = 6, weights = E(F)$distance)
get.all.shortest.paths(F, 1, to = V(F)) 

Мы знаем, что distances(F, weights = E(F)$distance) дает кубическую c матрицу потоков, связанных с кратчайшими путями в графе.

Мне нужно то же, что и в следующей строке:

distances(F, weights = E(F)$distance) # matrix of shortests paths flows between any two vertices
distances(F, v = 1, to = 6, weights = E(F)$distance)
get.all.shortest.paths(F, 1, to = V(F)) # gives the shortests paths between 1 and other vertices

На этот раз мне нужны самые длинные пути со связанными потоками в матрице. Я не знаю, возможно ли это с «igraph».

Спасибо за помощь!

1 Ответ

0 голосов
/ 13 апреля 2020

Если максимальное расстояние вычисляется первым и в качестве весов расстояния вычитаются из максимума, то алгоритм будет вычислять самые длинные пути.

Два метода ниже эквивалентны.

library(igraph)

max_dist <- max(E(G)$distance)
all_shortest_paths(G, from = 1, to = V(G), weights = max_dist - E(G)$distance)
get.all.shortest.paths(G, 1, to = V(G), weights = max_dist - E(G)$distance)

Примечания:

  1. Я изменил имя объекта графа на G, так как F также является символом для FALSE.
  2. График воссоздается, на этот раз с набором ГСЧ, чтобы сделать результаты воспроизводимыми.

Код создания графика.

set.seed(1234)

n <- 6  # number of vertices 
G <- erdos.renyi.game(n, p.or.m = 0.7, directed = FALSE)
m <- ecount(G)
min <- 1    # 1 km
max <- 50   # 50 km 
G <- set.edge.attribute(G, name = "distance", value = runif(m , min , max))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...