Encontrar caminhos curtos e gordos

10

Motivação: Nos algoritmos padrão de maxflow de caminho de aumento, o loop interno requer a localização de caminhos da origem para afundar em um gráfico direcionado e ponderado. Teoricamente, é sabido que, para que o algoritmo termine mesmo quando há capacidades irracionais de borda, precisamos colocar restrições nos caminhos que encontramos. O algoritmo Edmonds-Karp, por exemplo, nos diz para encontrar caminhos mais curtos.

Empiricamente, foi observado que também podemos querer encontrar caminhos de gordura (existe um termo melhor para isso?). Por exemplo, ao usar o dimensionamento de capacidade , encontramos caminhos mais curtos que podem suportar pelo menos quantidade de fluxo. Não há nenhuma restrição sobre quanto tempo o caminho pode ser. Quando não conseguimos mais encontrar caminhos, diminuímos ϵ e repetimos.ϵϵ

Estou interessado em otimizar a escolha de caminhos aumentados para uma aplicação muito específica do fluxo máximo, e quero explorar essa troca entre caminhos curtos e gordos. (Nota: não é necessário que eu sempre resolva o problema. Estou mais interessado em encontrar o maior limite inferior do fluxo no menor período de tempo da parede.)

Pergunta: Existe uma maneira padrão de interpolar entre a abordagem de caminho mais curto e a abordagem de escalonamento de capacidade? Ou seja, existe um algoritmo para encontrar caminhos curtos e gordos, onde, idealmente, algum parâmetro controlaria quanto comprimento do caminho estamos dispostos a trocar por gordura? No extremo, eu gostaria de poder recuperar os caminhos mais curtos de um lado e os de estilo de dimensionamento de capacidade do outro.

dan_x
fonte
3
Observe que, se você tentar otimizar a falta e a gordura ao mesmo tempo, entrará nos domínios da otimização multicritério, o que significa, na maioria dos casos, dureza NP.
Raphael
ϵ
@ Daniel Apon - há pseudocódigo para o dimensionamento da capacidade na página 31 deste slides: cs.princeton.edu/~wayne/kleinberg.../07maxflow.pdf
dan_x
@ Rafael - Observe que estou procurando um único objetivo que possa ser, por exemplo, uma combinação linear de comprimento e gordura. Isso ainda é considerado uma otimização multicritério?
dan_x
ϵ

Respostas:

2

No espírito do seu comentário sobre "muito bom, mas não necessariamente ideal", apresento a idéia a seguir com absolutamente nenhuma garantia de otimização!

Para completar, eis o pseudocódigo ao qual você se referiu (Observação: o algoritmo vinculado assume que as capacidades das bordas são números inteiros entre 1 e C e que os valores de capacidade residual e de fluxo são integrais):

Escala-fluxo máximo (G, s, t, C) {
   foreach e ∈ E f (e) ← 0
   Δ ← menor potência de 2 maior ou igual a C
   G_f ← gráfico residual

   enquanto (Δ ≥ 1) {
      G_f (Δ) ← gráfico residual Δ
      while (existe caminho de aumento P em G_f (Δ)) {
         f ← ​​aumento (f, C, P)
         atualizar G_f (Δ)
      }
      Δ ← Δ / 2
   }
   retorno f
}

ϵϵ=Δϵ

0 0ρ1 1ρ

ϵρ

ϵ(ρ)ϵ+(1 1-ρ)

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

Daniel Apon
fonte
Obrigado pela ideia - está chegando perto do que eu tinha em mente. Minha única preocupação é que esse seja apenas um "cronograma de decaimento" diferente para o dimensionamento da capacidade, certo?
11118 dan_x
À medida que você decai de forma mais agressiva, obtém caminhos mais curtos e, ao se deteriorar com menos agressividade, obtém caminhos mais gordos. O que eu tinha em mente era que cada caminho obteria uma pontuação com base em quão gorda e curta, e o algoritmo encontraria todos os caminhos com pontuação maior que algum limite.
dan_x 12/10
Mas se não houver uma maneira padrão de fazer isso, posso me sentar e pensar um pouco sobre como obter um algoritmo que faça o que eu quero.
dan_x