Suche nach kurzen und fetten Wegen

10

Motivation: Bei Standard-Augmenting-Path-Maxflow-Algorithmen erfordert die innere Schleife das Finden von Pfaden von der Quelle zur Senke in einem gerichteten, gewichteten Diagramm. Theoretisch ist bekannt, dass wir die gefundenen Pfade einschränken müssen, damit der Algorithmus auch bei irrationalen Kantenkapazitäten endet. Der Edmonds-Karp-Algorithmus sagt uns beispielsweise, dass wir kürzeste Wege finden sollen.

Empirisch wurde beobachtet, dass wir möglicherweise auch Fettpfade finden möchten (gibt es dafür einen besseren Begriff?). Zum Beispiel bei der Verwendung von Kapazitätsskalierung finden wir kürzeste Wege , die zumindest tragen können Flussmenge. Es gibt keine Einschränkung, wie lang der Pfad sein kann. Wenn wir keine Pfade mehr finden können, verringern wir und wiederholen.ϵϵ

Ich bin daran interessiert, die Auswahl der Erweiterungspfade für eine sehr spezifische Anwendung von Max-Flow zu optimieren, und ich möchte diesen Kompromiss zwischen kurzen und fetten Pfaden untersuchen. (Hinweis: Es ist nicht erforderlich, dass ich das Problem immer löse. Ich bin am meisten daran interessiert, die größte untere Grenze des Durchflusses in kürzester Wandzeit zu finden.)

Frage: Gibt es eine Standardmethode für die Interpolation zwischen dem Ansatz des kürzesten Pfades und dem Ansatz der Kapazitätsskalierung? Das heißt, gibt es einen Algorithmus zum Finden von Pfaden, die sowohl kurz als auch fett sind, wobei im Idealfall ein Parameter steuern würde, wie viel Länge des Pfades wir bereit sind, gegen Fett auszutauschen? Im Extremfall möchte ich in der Lage sein, kürzeste Pfade an einem Ende und Pfade im Kapazitätsskalierungsstil am anderen Ende wiederherzustellen.

dan_x
quelle
3
Beachten Sie, dass Sie, wenn Sie versuchen, sowohl die Kürze als auch die Fettigkeit gleichzeitig zu optimieren, in den Bereich der Optimierung mit mehreren Kriterien eintreten, was in den meisten Fällen die NP-Härte bedeutet.
Raphael
@dan x: Ich kenne Kapazitätsskalierungsalgorithmen für maximalen Durchfluss, aber nicht den spezifischen, den Sie beschreiben. Haben Sie eine Referenz (Konferenzbeitrag, Zeitschriftenartikel, schriftliche Vorlesung (en) usw.), in der Ihre Version der Kapazitätsskalierung ausführlich beschrieben wird? Ich bin gespannt, ob es einen bekannten "besten Weg" gibt, um zu initialisieren und zu dekrementieren (je nachdem, wie genau dies definiert ist, kann dies ganz natürlich zu einem "parametrisierten" Algorithmus führen, wie Sie ihn suchen). ϵ
Daniel Apon
@ Daniel Apon - Es gibt einen Pseudocode für die Kapazitätsskalierung auf Seite 31 dieser Folien: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_x
@ Raphael - Beachten Sie, dass ich nach einem einzigen Ziel suche, das z. B. eine lineare Kombination aus Länge und Fett sein kann. Wird das immer noch als Multikriteria-Optimierung angesehen?
dan_x
Außerdem bin ich bereit, einen "ziemlich guten" Weg einzuschlagen, auch wenn er nicht optimal ist. Bei der Kapazitätsskalierung nehmen wir beispielsweise einen Pfad, der mindestens so fett ist wie . Ich würde mich über ein Analogon freuen, das sowohl Kürze als auch Fett berücksichtigt. ϵ
dan_x

Antworten:

2

Im Geiste Ihres Kommentars zu "ziemlich gut, aber nicht unbedingt optimal" präsentiere ich die folgende Idee ohne jegliche Garantie für die Optimalität!

Der Vollständigkeit halber hier der Pseudocode, auf den Sie sich bezogen haben (Anmerkung: Der verknüpfte Algorithmus geht davon aus, dass die Kantenkapazitäten ganze Zahlen zwischen 1 und C sind und dass die Werte für Durchfluss und Restkapazität ganzzahlig sind):

Scaling-Max-Flow (G, s, t, C) {
   foreach e ∈ E f (e) ← 0
   Δ ← kleinste Potenz von 2 größer oder gleich C.
   G_f ← Restgraph

   während (Δ ≥ 1) {
      G_f (Δ) ← Δ-Restgraph
      while (es gibt einen Erweiterungspfad P in G_f (Δ)) {
         f ← ​​Augmentation (f, C, P)
         Aktualisiere G_f (Δ)
      }}
      Δ ← Δ / 2
   }}
   return f
}}

Beachten Sie, dass Sie bei = 1 ( im Pseudocode) nur Pfade in kürzester bis längster Reihenfolge finden, und wenn groß ist, finden Sie Pfade in (mehr oder weniger) fettester Reihenfolge schlankste Ordnung. Tatsächlich findet der Kapazitätsskalierungsalgorithmus abhängig von der Instanz Pfade in kürzester bis längster Reihenfolge innerhalb von "Buckets" von "genügend Fluss".ϵ = Δ ϵϵϵ=Δϵ

Fügen Sie dann einen weiteren Eingabeparameter , der angibt, wie sehr Sie sich für "Fett" und "Kürze" interessieren. Um sicherzustellen, dass wir die Laufzeit nicht massiv beeinflussen, benötigen wir außerdem, dass eine rationale Zahl ist.ρ0ρ1ρ

Jedes Mal, wenn ein Wert zugewiesen wird, nehmen wir zusätzlich das gewichtete arithmetische Mittel (ich hoffe, das ist der richtige Begriff ..) zwischen 1 und seinem aktuellen Wert. Das ist,ρϵρ

ϵ(ρ)ϵ+(1ρ)

Für wir einen reinen Algorithmus für den kürzesten Pfad. für wir einen rein fettesten Pfadalgorithmus; und für bekommen wir etwas dazwischen. Insbesondere für einen mittleren Wert konvergiert schneller zu , sodass Sie kürzere und weniger fetteste Pfade erhalten.ρ = 1 0 < ρ < 1 ϵ 1ρ=0ρ=10<ρ<1ϵ1

Daniel Apon
quelle
Vielen Dank für die Idee - sie kommt dem nahe, was ich mir vorgestellt habe. Meine einzige Sorge ist, dass dies nur ein anderer "Zerfallsplan" für die Kapazitätsskalierung ist, oder?
dan_x
Wenn Sie aggressiver zerfallen, erhalten Sie kürzere Pfade, und wenn Sie weniger aggressiv zerfallen, erhalten Sie dickere Pfade. Was ich im Sinn hatte, war, dass jeder Pfad eine Punktzahl erhalten würde, die darauf basiert, wie fett er war und wie kurz er war. Dann würde der Algorithmus alle Pfade mit einer Punktzahl finden, die größer als ein Schwellenwert ist.
dan_x
Aber wenn es keinen Standard gibt, kann ich mich hinsetzen und darüber nachdenken, einen Algorithmus zu finden, der das tut, was ich will.
dan_x