短くて太いパスを見つける


10

動機:標準の拡張パスmaxflowアルゴリズムでは、内側のループは、有向の重み付きグラフでソースからシンクへのパスを見つける必要があります。理論的には、不合理なエッジキャパシティが存在する場合でもアルゴリズムが終了するためには、検出したパスに制限を加える必要があることはよく知られています。たとえば、Edmonds-Karpアルゴリズムは、最短経路を見つけるように指示します。

経験的に、太いパス(これにはもっと良い用語がありますか?)のパスも見つけたいと思うかもしれません。たとえば、容量スケーリングを使用する場合、少なくとものフローに耐えられる最短パスを見つけます。パスの長さに制限はありません。パスが見つからなくなったら、を減らして繰り返します。ϵϵϵ

max-flowの非常に具体的なアプリケーションの拡張パスの選択を最適化することに興味があり、短いパスと太いパスの間のこのトレードオフを調査したいと思います。(注:常に問題を解決する必要はありません。最短のウォールタイムでフローの最大の下限を見つけることに最も興味があります。)

質問:最短経路アプローチと容量スケーリングアプローチの間を補間する標準的な方法はありますか?つまり、理想的には、いくつかのパラメータが、太さとトレードオフするパスの長さを制御する、短くて太いパスを見つけるアルゴリズムがありますか?極端な場合は、一方の端で最短パスを、もう一方の端で容量スケーリングスタイルのパスを回復できるようにしたいと考えています。


3
短さと太さの両方を同時に最適化しようとすると、多基準最適化の領域に入ることに注意してください。これは、ほとんどの場合、NP硬さを意味します。
ラファエル

@dan x:私は最大フローの容量スケーリングアルゴリズムを知っていますが、あなたが説明している特定のアルゴリズムは知りません。容量スケーリングのバージョンを詳細に説明しているリファレンス(会議論文、ジャーナル記事、講義講演など)がありますか?を初期化およびデクリメントするための既知の「最善の方法」があるかどうか知りたい(これがどれほど明確に定義されているかによっては、非常に自然に、あなたが探しているような「パラメータ化された」アルゴリズムにつながる可能性がある)。ϵ
ダニエルアポン

@Daniel Apon-これらのスライドの31ページに容量スケーリングの疑似コードがあります:cs.princeton.edu/~wayne/kleinberg...
dan_x

@Raphael-たとえば、長さと太さの線形の組み合わせなどの単一の目的を探していることに注意してください。それはまだ多基準最適化と見なされますか?
dan_x 2010年

また、たとえそれが最適でなくても、「かなり良い」道を進んで進んでいきます。たとえば、容量のスケーリングでは、少なくとも同じくらい太いパスを使用します。私は、短さと太さの両方を考慮したアナログに満足しています。ϵ
dan_x

回答:


2

「かなり良いが、必ずしも最適ではない」についてのあなたのコメントの精神で、私は次のアイデアを提示しますが、最適性は絶対に保証されません!

完全を期すために、これがあなたが参照した疑似コードです(備考:リンクされたアルゴリズムは、エッジ容量が1からCの間の整数であり、フローと残差の容量値は整数であると想定しています):

Scaling-Max-Flow(G、s、t、C){
   foreach e∈E f(e)←0
   Δ←C以上の最小の2の累乗
   G_f←残差グラフ

   一方(Δ≥1){
      G_f(Δ)←Δ残差グラフ
      while(G_f(Δ)に拡張パスPが存在します){
         f←augment(f、C、P)
         G_f(Δ)を更新する
      }
      Δ←Δ/ 2
   }
   fを返す
}

ときことを確認 = 1(擬似コードで)、あなただけの最長ために最短のパスを見つけ、そして時にしているに太った(多かれ少なかれ)が大きい、あなたしている所見パス最もスリムな注文。実際、インスタンスに応じて、容量スケーリングアルゴリズムは「十分なフロー」の「バケット」内で最短から最長の順序でパスを見つけます。ε = Δ εϵϵ=Δϵ

次に、別の入力パラメータを追加しますこれは、「太さ」と「短さ」のどちらを重視するかを表します。ランタイムに大きな影響を与えないようにするため、さらにが有理数であることを要求します。ρ0ρ1ρ

次に、値が割り当てられるたびに、1とその現在の値の間の加重算術平均(それが正しい項であることを願っています)を追加で取得します。あれは、ρϵρ

ϵ(ρ)ϵ+(1ρ)

、我々は純粋な最短パスアルゴリズムで終わります。以下のための、私たちは純粋な太ったパスアルゴリズムを取得します。そして、のために我々は、間に何かを得ます。特に、中間値の場合、はに早く収束するため、最短パスが多くなり、最も太いパスが少なくなります。ρ = 1 0 < ρ < 1 ε 1ρ=0ρ=10<ρ<1ϵ1


アイデアをありがとう-それは私が考えていたものに近づいています。私の懸念の1つは、これが容量スケーリングの単なる「減衰スケジュール」にすぎないということです。
dan_x

より積極的に減衰すると、より短いパスが得られ、より積極的に減衰しなければ、より太いパスが得られます。私が頭に浮かんだのは、各パスはそれがどれほど太く、どれだけ短いかに基づいてスコアを取得し、アルゴリズムがスコアよりも大きいすべてのパスを見つけるということでした。
dan_x

しかし、これを行うための標準的な方法がない場合、私は座って、私が望むことを行うアルゴリズムを取得することを検討することができます。
dan_x 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.