Trouver des chemins courts et gras


10

Motivation: dans les algorithmes standard de débit maximal de chemin d'augmentation, la boucle interne nécessite de trouver des chemins de la source au puits dans un graphique orienté et pondéré. Théoriquement, il est bien connu que pour que l'algorithme se termine même lorsqu'il existe des capacités de bord irrationnelles, nous devons mettre des restrictions sur les chemins que nous trouvons. L'algorithme Edmonds-Karp, par exemple, nous dit de trouver les chemins les plus courts.

Empiriquement, il a été observé que nous pourrions également vouloir trouver des voies grasses (existe-t-il un meilleur terme pour cela?). Par exemple, lorsque vous utilisez la mise à l'échelle de la capacité , nous trouvons les chemins les plus courts qui peuvent supporter au moins quantité de flux. Il n'y a aucune restriction sur la longueur du chemin. Lorsque nous ne pouvons plus trouver de chemin, nous diminuons ϵ et répétons.ϵϵ

Je souhaite optimiser le choix des voies d'augmentation pour une application très spécifique du max-flow, et je souhaite explorer ce compromis entre les voies courtes et les voies grasses. (Remarque: il n'est pas nécessaire pour moi de toujours résoudre le problème. Je suis le plus intéressé à trouver la plus grande limite inférieure d'écoulement dans le temps de mur le plus court.)

Question: Existe - t-il un moyen standard d'interpoler entre l'approche à chemin le plus court et l'approche à échelle de capacité? Autrement dit, existe-t-il un algorithme pour trouver des chemins qui sont à la fois courts et gras, où, idéalement, un paramètre contrôlerait la longueur du chemin que nous sommes prêts à échanger contre le gras? À l'extrême, j'aimerais pouvoir récupérer les chemins les plus courts d'un côté et les chemins de style de mise à l'échelle de la capacité de l'autre.


3
Notez que si vous essayez d'optimiser à la fois la brièveté et l'adiposité en même temps, vous entrez dans les domaines de l'optimisation multicritères, ce qui signifie dans la plupart des cas la dureté NP.
Raphael

@dan x: Je connais les algorithmes de mise à l'échelle de la capacité pour le débit maximal, mais pas celui que vous décrivez. Avez-vous une référence (document de conférence, article de journal, conférence (s) écrite (s), etc.) décrivant en détail votre version de l'échelle de capacité? Je suis curieux de savoir s'il existe une "meilleure façon" connue d'initialiser et de décrémenter (selon la façon dont elle est bien définie, elle pourrait très naturellement conduire à un algorithme "paramétré" comme vous le recherchez). ϵ
Daniel Apon

@Daniel Apon - il y a un pseudocode pour la mise à l'échelle de la capacité à la page 31 de ces diapositives: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_x

@Raphael - Notez que je recherche un seul objectif qui pourrait être par exemple une combinaison linéaire de longueur et de gras. Est-ce toujours considéré comme une optimisation multicritère?
dan_x

De plus, je suis prêt à emprunter un "assez bon chemin" même s'il n'est pas optimal. Dans la mise à l'échelle des capacités, par exemple, nous prenons tout chemin qui est au moins aussi gros que . Je serais heureux avec un analogue qui prend en compte à la fois la brièveté et le gras. ϵ
dan_x

Réponses:


2

Dans l'esprit de votre commentaire sur "assez bien mais pas forcément optimal", je vous présente l'idée suivante sans aucune garantie d'optimalité!

Pour être complet, voici le pseudocode auquel vous avez fait référence (Remarque: l'algorithme lié suppose que les capacités de bord sont des entiers compris entre 1 et C et que les valeurs de débit et de capacité résiduelle sont intégrales):

Mise à l'échelle-Max-Flow (G, s, t, C) {
   foreach e ∈ E f (e) ← 0
   Δ ← plus petite puissance de 2 supérieure ou égale à C
   G_f ← graphique résiduel

   tandis que (Δ ≥ 1) {
      G_f (Δ) ← Graphique Δ-résiduel
      tandis que (il existe un chemin croissant P dans G_f (Δ)) {
         f ← ​​augmenter (f, C, P)
         mettre à jour G_f (Δ)
      }
      Δ ← Δ / 2
   }
   retour f
}

ϵϵ=Δϵ

0ρ1ρ

ϵρ

ϵ(ρ)ϵ+(1ρ)

ρ=0ρ=10<ρ<1ϵ1


Merci pour l'idée - ça se rapproche de ce que j'avais en tête. Ma seule préoccupation est que ce n'est qu'un "calendrier de décroissance" différent pour la mise à l'échelle de la capacité, non?
dan_x

À mesure que vous vous désintégrez de manière plus agressive, vous obtenez des chemins plus courts et à mesure que vous vous désintégrez moins agressivement, vous obtenez des chemins plus gros. Ce que j'avais à l'esprit, c'était que chaque chemin obtiendrait un score en fonction de sa masse grasse et de sa longueur, puis l'algorithme trouverait tous les chemins avec un score supérieur à un certain seuil.
dan_x

Mais s'il n'y a pas de façon standard de le faire, je peux m'asseoir et réfléchir à l'obtention d'un algorithme qui fait ce que je veux.
dan_x
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.