2016-10-13 3 views
0

Ich versuche ein Näherungsmaß abzuleiten, das den kürzesten Abstand zwischen allen Scheitelpunkten in meinem Diagramm und einer Gruppe von Scheitelpunkten verwendet.Den kürzesten Pfad von allen Scheitelpunkten zu mehreren Scheitelpunkten finden. Igraph

Ich konnte die kürzeste Entfernung mit kürzeste.wege(). Ich möchte die entsprechenden Pfade bekommen, damit ich sehen kann, wie sich die Pfade ändern, wenn ich die Kantengewichte ändere. Aber ich war dazu nicht in der Lage. Ich habe get.shortest.path gefunden, das nur den kürzesten Pfad von einem Knoten zu einer Gruppe von Knoten erhalten kann. Ich mag es, es von allen Scheitelpunkten zu einer Gruppe von Scheitelpunkten zu bringen, ohne sich auf eine for-Schleife verlassen zu müssen.

Haben Sie Empfehlungen? Ein Beispielcode Sie wahrscheinlich ausführen können auf die folgenden:

set.seed(2222) 
graph <- erdos.renyi.game(50, 0.3) 
# Group of vertices that I want to know the shortest paths to. 
some_function_that_can_get_the_shortest_path(graph, from=V(graph), to=V(graph)[1:10]) 
#Currently get.shortest.paths(graph, 1, to=V(graph)[1:10]) gets me the following 
$vpath 
$vpath[[1]] 
+ 1/50 vertex: 
[1] 1 

$vpath[[2]] 
+ 3/50 vertices: 
[1] 1 12 2 

$vpath[[3]] 
+ 2/50 vertices: 
[1] 1 3 

$vpath[[4]] 
+ 3/50 vertices: 
[1] 1 3 4 

$vpath[[5]] 
+ 2/50 vertices: 
[1] 1 5 

$vpath[[6]] 
+ 2/50 vertices: 
[1] 1 6 

$vpath[[7]] 
+ 3/50 vertices: 
[1] 1 3 7 

$vpath[[8]] 
+ 3/50 vertices: 
[1] 1 35 8 

$vpath[[9]] 
+ 3/50 vertices: 
[1] 1 14 9 

$vpath[[10]] 
+ 3/50 vertices: 
[1] 1 22 10 

Antwort

0

Sie können versuchen, mit induced.subgraph die Grafik subsetting den Satz von Eckpunkten Sie distances oder shortest_paths, analysieren und gelten zum Beispiel teilen möchten:

set.seed(2222) 
graph <- erdos.renyi.game(50, 0.3) 
subgraph<-induced.subgraph(graph,c(1,5,19)) 
subgraph2<-induced.subgraph(graph,c(20,38,50)) 
v1<-V(subgraph) 
v1<-as.vector(v1) 
v2<-V(subgraph2) 
v2<-as.vector(v2) 

distances(graph,v1,to=v2) 

     [,1] [,2] [,3] 
[1,] 0 2 1 
[2,] 2 0 2 
[3,] 1 2 0 

oder einfach nur benutzen get.shortest.paths

> get.shortest.paths(graph, v1, to=v2) 
$vpath 
$vpath[[1]] 
+ 1/50 vertex: 
[1] 1 

$vpath[[2]] 
+ 3/50 vertices: 
[1] 1 12 2 

$vpath[[3]] 
+ 2/50 vertices: 
[1] 1 3 



$epath 
NULL 

$predecessors 
NULL 

$inbound_edges 
NULL 
+0

ich kann schon den kürzesten Abstand bekommen. Zu mir möchte ich den kürzesten Weg gehen. Ich denke, ich werde eine Ausgabe von get_shortest_path setzen, da ich vielleicht nicht klar genug war. – rokman54

+0

Ich denke, um die Änderungen in den kürzesten Wegen zu vergleichen, wenn die Kantengewichte variieren, so müssen Sie zwei Grafiken machen: die ursprüngliche Gewicht-Grafik und die Änderung Gewicht-Grafik und berechnen für jede die kürzesten Wege und sehen, wie sie sich ändern. Sehen Sie sich die Ausgabe mit 'get.shortest.paths' in der Teilmenge an und hoffen Sie, dass sie nützlich ist. – Dan

Verwandte Themen