Trovare percorsi corti e grassi


10

Motivazione: Negli algoritmi standard di maxflow del percorso di incremento, il ciclo interno richiede di trovare i percorsi dalla sorgente al sink in un grafico diretto e ponderato. Teoricamente, è risaputo che, affinché l'algoritmo si interrompa anche quando ci sono capacità di bordo irrazionali, dobbiamo porre delle restrizioni sui percorsi che troviamo. L'algoritmo Edmonds-Karp, ad esempio, ci dice di trovare i percorsi più brevi.

Empiricamente, è stato osservato che potremmo anche voler trovare percorsi grassi (c'è un termine migliore per questo?). Ad esempio, quando si utilizza il ridimensionamento della capacità , troviamo i percorsi più brevi che possono sopportare almeno quantità di flusso. Non ci sono restrizioni su quanto può essere lungo il percorso. Quando non riusciamo più a trovare alcun percorso, diminuiamo ϵ e ripetiamo.ϵε

Sono interessato a ottimizzare la scelta dei percorsi di potenziamento per un'applicazione molto specifica del flusso massimo e desidero esplorare questo compromesso tra percorsi corti e grassi. (Nota: non è necessario per me risolvere sempre il problema. Sono molto interessato a trovare il limite inferiore più grande sul flusso nel minor tempo possibile.

Domanda: esiste un modo standard per interpolare tra l'approccio del percorso più breve e l'approccio del ridimensionamento della capacità? Cioè, esiste un algoritmo per trovare percorsi che siano sia corti che grassi, dove idealmente alcuni parametri controllerebbero la lunghezza del percorso che siamo disposti a compensare per la fatalità? Al limite, vorrei poter recuperare i percorsi più brevi da un lato e i percorsi in stile di ridimensionamento della capacità dall'altro.


3
Si noti che se si tenta di ottimizzare contemporaneamente sia la brevità che il grasso corporeo, si entra nei regni dell'ottimizzazione multicriteria, il che significa nella maggior parte dei casi la durezza NP.
Raffaello,

@dan x: sono a conoscenza degli algoritmi di ridimensionamento della capacità per il flusso massimo, ma non quello specifico che stai descrivendo. Hai un riferimento (documento di conferenza, articolo di giornale, lezione (e) scritta (e), che descrive il dettaglio della tua capacità di ridimensionamento della capacità? Sono curioso di sapere se esiste un "modo migliore" noto per inizializzare e decrementare (a seconda di quanto ben definito, potrebbe portare naturalmente a un algoritmo "parametrizzato" come quello che stai cercando). ε
Daniel Apon,

@Daniel Apon - c'è uno pseudocodice per il ridimensionamento della capacità a pagina 31 di queste diapositive: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_x

@Raphael - Nota che sto cercando un unico obiettivo che potrebbe essere ad esempio una combinazione lineare di lunghezza e grasso. È ancora considerata un'ottimizzazione multicriteria?
dan_x,

Inoltre, sono disposto a prendere una strada "abbastanza buona" anche se non è ottimale. Nel ridimensionamento della capacità, ad esempio, prendiamo qualsiasi percorso che sia almeno grasso come . Sarei felice con qualche analogo che tenga conto sia della carenza che del grasso. ε
dan_x,

Risposte:


2

Nello spirito del tuo commento su "abbastanza buono ma non necessariamente ottimale", presento la seguente idea senza alcuna garanzia di ottimalità!

Per completezza, ecco lo pseudocodice a cui hai fatto riferimento (Nota: l'algoritmo collegato presuppone che le capacità dei bordi siano numeri interi compresi tra 1 e C e che i valori di flusso e capacità residua siano integrali):

Scaling-Max-Flow (G, s, t, C) {
   foreach e ∈ E f (e) ← 0
   Δ ← potenza minima di 2 maggiore o uguale a C
   G_f ← grafico residuo

   mentre (Δ ≥ 1) {
      G_f (Δ) ← resid-grafico residuo
      while (esiste un percorso di aumento P in G_f (Δ)) {
         f ← ​​aumento (f, C, P)
         aggiorna G_f (Δ)
      }
      Δ ← Δ / 2
   }
   ritorno f
}

εε=Δε

0ρ1ρ

ερ

ε(ρ)ε+(1-ρ)

ρ=0ρ=10<ρ<1ε1


Grazie per l'idea: si sta avvicinando a quello che avevo in mente. La mia unica preoccupazione è che questa sia solo una diversa "pianificazione del decadimento" per il ridimensionamento della capacità, giusto?
dan_x,

Man mano che decadi in modo più aggressivo, ottieni percorsi più corti e man mano che decadi in modo meno aggressivo, ottieni percorsi più grassi. Quello che avevo in mente era che ogni percorso avrebbe ottenuto un punteggio basato su quanto era grasso e quanto era corto, quindi l'algoritmo avrebbe trovato tutti i percorsi con punteggio maggiore di una soglia.
dan_x,

Ma se non esiste un modo standard per farlo, posso sedermi e riflettere su come ottenere un algoritmo che fa quello che voglio.
dan_x,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.