Как построить график с использованием матрицы случайных расстояний? - PullRequest
1 голос
/ 11 апреля 2020

Я хочу сгенерировать случайные транспортные графы в R с n вершинами.

Графики должны быть двудольными и связными (обычно существует связь / путь между 2 вершины, обычно не прямые) без "петель".

Кроме того, оценка ребер должна быть случайной и строго положительной .

Я попытался сделать следующее :

n=6  # number of vertices 
F <- erdos.renyi.game(n, p.or.m=0.5, 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)

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

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    0    2    1    1    2    1
[2,]    2    0    2    1    1    1
[3,]    1    2    0    1    1    1
[4,]    1    1    1    0    2    1
[5,]    2    1    1    2    0    1
[6,]    1    1    1    1    1    0

Обычно я должен получать одинаковые случайные значения от 1 до 50.

Также я не уверен, что график не будет содержать al oop, если я выполню еще один код в будущем.

Полагаю, мои вопросы ясны! Спасибо, если бы вы могли помочь!

1 Ответ

1 голос
/ 11 апреля 2020

Решение:

n=6  # number of vertices 
F <- erdos.renyi.game(n, p.or.m=0.5, directed=FALSE) # We create the graph F 
m=ecount(F)  # number of edges we obtained using erdos.renyi.game() 
min = 1    # 1 km    # min and max values for the edges flows 
max = 50   # 50 km 
F <- set.edge.attribute(F, name="distance", value=runif(m , min , max)) # The flows are drawn in random 
plot(F, layout=layout.fruchterman.reingold) # we plot the graph F
distances(F)    # matrix of lentghs of the shortest paths between i & j
distances(F, weights = E(F)$distance) # matrix of flows of the shortest paths 
distances(F, v = 1, to = 6, weights = E(F)$distance) # same if we want a specific minimum path between two vertices ( ex : 1--->6 ) 
get.all.shortest.paths(F, 1, to = V(F)) # all shortest paths list 
graph.maxflow(F, 1, 6) # the maximum possible flow of any route between 1--->6 
...