2016-07-13 18 views
11

Ich habe eine DAG mit N Knoten, d. H. 1, 2, ..., N, und jeder Knoten hat ein Gewicht (wir können es Zeit nennen) x_1, x_2, ..., x_N. Ich möchte eine topologische Sortierung durchführen, aber die Schwierigkeit besteht darin, dass ich beim Sortieren eine Zielfunktion habe. Meine Zielfunktion ist die Minimierung der Gesamtzeit zwischen mehreren Knotenpaaren.Topologische Sortierung mit einer Zielfunktion

Zum Beispiel habe ich eine DAG mit 6 Knoten, und ich möchte eine bestimmte topologische Sortierung so dass (1,3) + (2,4) minimiert wird, wo (A,B) die Zeit zwischen zwei Knoten A und B. Zum Beispiel zeigt, wenn wir eine Art [1, 6, 3, 2, 5, 4, 7], (1,3) = x_6 und (2,4) = x_5. Basierend auf der DAG, möchte ich eine Sortierung finden, die (1,3) + (2,4) minimiert.

Ich habe eine Zeit lang dieses Problem nachgedacht. Generieren Sie alle möglichen topologischen Sortierungen (Referenz link) und berechnen Sie die Zielfunktion eins nach dem anderen ist immer eine mögliche Lösung, aber es dauert zu lange, wenn N groß ist. Ich war auch Zweig gebundene Beschneidung vorgeschlagen zu verwenden, wenn alle möglichen Arten zu erzeugen (Ich bin nicht sehr vertraut Zweig gebunden, aber ich denke, das wird nicht dramatisch, die Komplexität reduzieren).

Jeder (optimale oder heuristische) Algorithmus für diese Art von Problem? Es wäre perfekt, wenn der Algorithmus auch auf andere Zielfunktionen angewendet werden könnte, wie zum Beispiel die Minimierung der Gesamtstartzeit für einige Knoten. Jeder Vorschlag wird geschätzt.

PS: Oder ist es alternativ möglich, dieses Problem als ein lineares ganzzahliges Optimierungsproblem zu formulieren?

+0

Ich vermute das Problem ist schwer, weil 2 kleine Variationen davon definitiv sind: (1) Wenn die * Summe * der Entfernungen durch die * maximalen * Distanzen ersetzt wird, dann kann das Problem der Bandbreitenminimierung bei NP-hard auf dieses Problem reduziert werden (von der Eingabegraph G, lösche alle Kanten und füge einen einzelnen Wurzelknoten mit einer Out-Kante zu jedem anderen Knoten hinzu - das bedeutet, dass * alle * Ordnungen der ursprünglichen n Knoten eine gültige topologische Ordnung sind - und für jede Kante (u , v) in G (das du gelöscht hast), füge einen Ausdruck '(u, v)' zu der zu minimierenden Zielfunktion hinzu; ... –

+0

... (2) wenn Sie stattdessen die Summe (nicht das Maximum) der Abstände zwischen den Paaren beibehalten, aber die Zielfunktion leicht verallgemeinern, um jeden Ausdruck (zB '(1,3)' oder '(2, 4) 'in Ihrem Beispiel) mit einem separaten Gewicht multipliziert werden, dann können Sie das NP-harte Problem der quadratischen Zuordnung auf dieses Problem auf die gleiche Weise reduzieren. Es kann sein, dass selbst der spezielle Fall der QAP, bei dem jedes Gewicht 1 ist, immer noch NP-schwer ist - das würde bedeuten, dass dein Problem auch ist - aber ich konnte das nicht mit ein paar Googles bestätigen. –

+0

@ j_random_hacker. Danke für deine Antwort. Ich glaube auch, dass dieses Problem NP-schwer ist. Ich erkannte, dass mein Problem dem Problem des reisenden Verkäufers ähnelt. Mir ist das Problem der quadratischen Zuweisung und das Problem der Minimierung der Bandbreite nicht bekannt. Danke für die Verbindung. Ich habe bereits eine heuristische Methode für dieses Problem entworfen. Ich bin jedoch auf der Suche nach einer kombinatorischen Optimierungsformulierung, bei der Branch-and-Bound angewendet werden kann, um die optimale Lösung für einen Vergleich meiner heuristischen Methode zu erhalten. – MIMIGA

Antwort

0

Eine Möglichkeit, dies zu lösen, ist wie folgt:

Zunächst laufen wir All-Pairs kürzesten Weg Algorithmus Floyd-Warshall. Dieser Algorithmus kann in essentially 5 lines of code und es läuft in O(V^3) Zeit codiert werden. Er erzeugt die kürzesten Wege zwischen jedem der Knotenpaare in dem Graphen, d. H. Er erzeugt eine VXV-Matrix von kürzesten Wegen als seine Ausgabe.

Es ist trivial, diesen Algorithmus zu ändern, so dass wir auch die Anzahl der Scheitelpunkte in jedem der O(N^2) Pfade erhalten können. Jetzt können wir alle Pfade eliminieren, die weniger als N Ecken haben. Für die verbleibenden Pfade ordnen wir sie nach ihren Kosten an und testen dann jeden von ihnen, um zu sehen, ob die topologische Sortiereigenschaft nicht verletzt wird. Wenn diese Eigenschaft nicht verletzt wird, haben wir unser gewünschtes Ergebnis gefunden. Der letzte Schritt, d.h. das Testen der topologischen Sortierung, kann in O (V + E) für jeden der O (V^2) -Wege durchgeführt werden. Dies ergibt die Worst-Case-Laufzeit von O(V^4). Doch in der Praxis soll dies schnell sein, weil Floyd-Warshall sehr Cache gemacht werden kann freundlich und wir würden nur einen Bruchteil von O (N^2) Wegen in der Realität testen. Wenn Ihre DAG nicht dicht ist, können Sie möglicherweise auch topologische Tests mit geeigneten Datenstrukturen optimieren.

+0

Bitte korrigieren Sie mich, wenn ich falsch liege. Ich denke, es gibt ein Problem für Ihre Methode. Das heißt, meine optimale Lösung minimiert nicht unbedingt den Weg vom Startknoten zum Endknoten, d. H. Meine optimale Lösung ist nicht unbedingt in den Floy-Warshall-Lösungen enthalten. Zum Beispiel, wenn wir eine DAG mit 3 Knoten haben, eine Verbindung von 1 bis 2, 1 bis 3 und 2 bis 3 (1 steht vor 2, 1 vor 3, usw.) und wir wollen (1,3) minimieren. Die einzige mögliche topologische Sortierung ist [1,2,3] und (1,3) = x_2. Es ist jedoch leicht zu sehen, dass die Lösungen von Floyd-Warshall alle einen Vertex-Wert von 2 haben. – MIMIGA

+0

Ich denke, ich bin nicht sehr klar über dein Beispiel. Es gibt nur eine Topo-Sortierung, die in Ihrem Beispiel möglich ist, so dass es keinen Weg gibt, etwas zu minimieren. Mein Verständnis war, dass Sie DAG mit mehreren möglichen Topo-Sortierung haben, und Sie möchten eine auswählen, die Gesamtkosten im "primären" Pfad in den sortierten Scheitelpunkten minimiert. Es kann nur den Pfad von x zu y geben, den Sie optimieren möchten. Dies kann durch Setzen der Kosten für andere Kanten als 0 erfolgen. Es ist großartig, wenn Sie ein nicht triviales Beispiel angeben können. – ShitalShah

+0

Mit anderen Worten, alle möglichen Lösungen von Floyd-Warshall können eine Zählung kleiner als N haben. Also wird die Methode alle eliminieren und keine Lösung in der letzten ergeben. Aber mein Problem hat immer eine Lösung, da dies DAG ist und es immer eine topologische Sortierung gibt. Betrachten Sie eine nicht-triviale DAG mit 4 Knoten, Links von A nach B, B nach C, A nach D und D nach C. Ich möchte (A, C) + (B, C) minimieren. So haben alle kürzesten Pfade höchstens 2 Zählungen und sie sind alle in Ihrer Methode eliminiert. Topologische Sortierungen ergeben jedoch zwei mögliche Lösungen [A, B, D, C] und [A, D, B, C]. Die zweite ist meine optimale Lösung. – MIMIGA

0

Hier ist eine Idee:

Der Einfachheit halber zunächst annehmen, dass Sie ein einzelnes Paar haben zu optimieren (I auf den allgemeinen Fall äußern werde später) und nehme an, Sie bereits Ihr Diagramm in ein sortiert haben topologisch Array.

das Array Segment Nehmen am unteren beginnend (in Bezug auf Ihre topologischen Reihenfolge) Knoten des Paares, sagen l, und bei dem höheren Knoten enden, sagen h. Errechne für jeden einzelnen Knoten, der zwischen l und h sortiert ist, ob er von unten durch l begrenzt ist und/oder von oben durch h begrenzt ist.Sie können die vorherige Eigenschaft berechnen, indem Sie Knoten in einem "aufwärts" BFS von l markieren, schneiden an Knoten sortiert über h; und ähnlich letzteres durch Markieren in einem "Abwärts" -BFS von h, Schneiden an Knoten sortiert unter l. Die Komplexität beider Passagen ist O (B * L), wobei B der Verzweigungsfaktor ist und L die Anzahl der Knoten ist, die ursprünglich zwischen l und h sortiert sind.

nun alle Knoten, die nicht begrenzt sind, von oben durch h oberhalb h bewegt werden, und alle Knoten, die von unten her begrenzt sind, nicht durch l kann unter l (die beiden Sätze überlappen können,) alle ohne Verletzung der bewegt werden topologische Sortierung des Arrays, vorausgesetzt, dass die ursprüngliche sortierte Reihenfolge innerhalb jeder Gruppe von Knoten, die nach oben oder nach unten verschoben wurden, erhalten bleibt.

Dasselbe Verfahren kann auf beliebig viele Paare angewendet werden, vorausgesetzt, dass die Segmente, die sie aus der ursprünglichen Sortierreihenfolge schneiden, nicht überlappen.

Wenn zwei Paare sich überlappen, sagen wir (l1, h1) und (l2, h2), so dass z.B. l1 < l2 < h1 < h2 in der ursprünglichen Reihenfolge sortiert, haben Sie die folgenden zwei Fälle:

1) Im trivialen Fall, in dem h1 und l2 passieren in der topologischen Ordnung in keinem Zusammenhang sein, dann sollten Sie Lage sein, die zwei Paare meist unabhängig voneinander zu optimieren, die Anwendung nur einige Sorgfalt entweder l2h1 oben oder unten h1l2 zu bewegen (aber nicht zB h1l1 unten, wenn das sollte möglich erweisen.)

2) Wenn l2 < h1 in der topologischen Ordnung, Sie beide Paare als einziges Paar behandeln können (l1, h2) und dann möglicherweise das Verfahren gelten noch einmal zu (l2, h1).

Da es nicht klar ist, was der gesamte Prozess im nicht-triviale überlappende Fall zu erreichen, vor allem, wenn Sie kompliziertere überlappende Muster haben, kann es sich als besser sein alle Paare gleichmäßig zu behandeln, unabhängig davon, überlappen. In diesem Fall kann die Reihenfolge wiederholt verarbeitet werden, während jeder Lauf eine Verbesserung gegenüber der vorherigen ergibt (ich bin nicht sicher, ob die Prozedur in Bezug auf die Zielfunktion monoton ist - wahrscheinlich nicht.)

Verwandte Themen