Мне нужно найти способ найти путь между двумя вершинами, который максимизирует произведение атрибутов ребра. В моем случае атрибут края — это вероятность соединения. Предположим, я хочу найти путь с максимальной вероятностью между вершинами 1 и 4 в следующем примере:
require(igraph)
G<-graph.data.frame(as.data.frame(cbind(id1=c(1,1,2,3,1,4),id2=c(2,3,4,4,5,5),weight=c(0.5,0.35,0.5,0.9,0.6,0.6))), directed=FALSE)
plot(G, edge.label=paste(E(G),"=",signif(E(G)$weight, digits=1)), vertex.size=10)
#weighted shortest path using connection probability
a<-get.shortest.paths(G,1,4, weights=E(G)$weight, output="epath")[[1]]
E(G)[a]
prod(E(G)$weight[a])
#weighted shortest path using the inverse of connection probability
b<-get.shortest.paths(G,1,4, weights=1-E(G)$weight, output="epath")[[1]]
E(G)[b]
prod(E(G)$weight[b])
В этом примере путь, который максимизирует соединение, проходит через вершину 5, на самом деле произведение вероятностей равно 0,36 (0,6 * 0,6). Функция кратчайшего пути, по-видимому, отдает приоритет на основе суммы атрибутов, а не произведения. На самом деле, в приведенном выше примере либо я использую вероятности, либо обратную вероятность, она предлагает два пути, вероятность соединения которых ниже (0,25 и 0,315).
Есть ли способ найти путь, который максимизирует продукт??? спасибо