Предположим, что у меня есть граф с n вершинами, такой, что граф является двухсторонним, потоки построены по равномерному закону и положительны!
Если мы рассмотрим функцию L (i, j), которая дает поток минимального пути между вершинами i и j созданного случайного графа, я ищу (i, j) такой, что функция L достигает это максимум.
Используя "igraph", я создал функцию r, которая генерирует некоторый случайный граф , первая цель - найти все кратчайший путь для этого графика. После этого мне понадобятся две вершины, которые связаны с максимумом матрицы потока q1 (максимум L):
- Для любых двух вершин (i, j) Матрица q1 дает поток, связанный с минимальным путем между ** (i, j). Следующий код найдет максимум L, найдя максимум q1: **
.
sim_model<-function(number_vertices,min_val,max_val ){
#: Creating the graph F
n=number_vertices # number of vertices
F <- erdos.renyi.game(n, p.or.m=0.7, directed=FALSE) #random graph bi-partite
m1=ecount(F) # edges number
min = min_val # 1 km
max = max_val # 50 km
run_unif = runif(m1 , min , max) #uniform law for flows/costs
F <- set.edge.attribute(F, name="distance", value= run_unif ) # setting edges flows / costs
plot(F, layout=layout.fruchterman.reingold) # plot F
q1=distances(F, weights = E(F)$distance) # flow matrix for all shortest paths between any two vertices
result1 = which(q1 == max(q1), arr.ind=TRUE) # The maximum possible flow for all shortests paths considering all vertices
associated_route_1=as.numeric(substr(get.all.shortest.paths(F, result1[2,][1], to = result1[2,][2])$`res`[[1]],0,7)) # the route corresponding to that maximum flow ( considering all the possible shortest paths only for any two vertices )
}
Проблема:
Код работает, единственная проблема в том, что переменная associated_route_1
обычно является прямым ребром между двумя вершинами. Этот случай меня не интересует! Я хочу знать, что я могу сделать, чтобы избежать этого.
Я буду sh Моя просьба ясна, спасибо за помощь!