動的グラフの増分最大フロー


12

動的グラフの最大フローを計算する高速アルゴリズムを探しています。グラフ所与すなわちG=(V,E)s,tV我々は最大流量有するFにおけるGからst。次に、対応するエッジで追加/削除された新しい/古いノードuがグラフを形成しますG1。新しく作成されたグラフの最大フローとは何ですか?最大流量の再計算を防ぐ方法はありますか?

非常に時間/メモリを消費しない前処理を歓迎します。

最も簡単なアイデアは、フローを再計算することです。

別の簡単なアイデアは、これです。以前の最大フロー計算で使用されたすべての拡張パスを保存し、頂点を追加するために、ソースから始まり、vに行き、次に行く単純なパスを見つけることができます(前のステップで更新された容量グラフで)目的地までが、問題があり、このパスは簡単であるべき、私はより良いよりも見つけることができませんでしたO N メートルのためにこのような場合のために、M = | E | 。(また、それがただ1つのパスである場合、これはO n + m で実行できますが、そうではないことに注意してください。)vvO(nm)m=|E|O(n+m)

また、上記のノードを削除するというアイデアは機能しません。

また、エッジのインクリメンタルアプローチなどの論文を見ましたが、この場合は十分ではないようです。各エッジの以上であり、この場合は適切な拡張ではないようです(フローを再計算するだけです)。また、現在はFord-Fulkerson最大フローアルゴリズムを使用しています。オンラインアルゴリズムに適したオプションがある場合は、それを知っておくと便利です。O(m)


「しかし、問題は、このパスは単純でなければならない」という部分を明確にしてください。わかりませんでした。
ドミトロKorduban

@ maldini.ua、実際には、ソースから、次にvからデスティネーションへのパスに共通の頂点があってはなりません(vを除く)。vが新しく追加されたノードであると想定します。そうでない場合は、一部のチェックをスキップして、より高速なアルゴリズムを使用できます(平均的に、または漸近的になる可能性があります)。vvvv
サイード

わかりましたが、私にとってはについて特別なものではありません。最も簡単な再計算のアイデアは次のとおりだと思います。1)残差グラフにエッジを持つ新しい頂点を追加します。2)選択した最大流量アルゴリズムを使用して、更新された残差グラフで最大流量を見つけます。提案されたケースは、最大フローアルゴリズムによって「自動的に」処理されます(たとえば、拡張パスなどは見つかりません)。ノードの削除に興味がある場合は、答えとして書きます。PS明確にするために、あなたは有向グラフまたは無向グラフを持っていますか?v
ドミトロKorduban

@ maldini.ua、通常の再計算の追加現在のソリューションの複雑さのため、それは良いとは思いません(通常、あまりにも多くのエッジが役に立たず、実際には非常に高いパフォーマンスの問題を引き起こさないことを知って良いかもしれません)が、削除することを考えているならノード、私はあなたの考えを見て興味があります、またグラフは指示されます。PSしかし、私は両方のケースに興味があります。|G|
サイード

残差グラフで実行することを忘れないでください。この時点では、容量がゼロのエッジが多数あるはずです。通常、特にスパースグラフでは非常に高速に動作します(少なくとも私にとってはうまくいきました)。一方、「単純なパス」アプローチは、私にとって余分な洗練のように思えます。また、あなたが持っていることを忘れないでください(フォード-フルカーソンのための時間を実行しているにバインドさ| fは|の和で囲まれているVの隣接するエッジ容量)。O(|f||E|)|f|v
ドミトロKorduban

回答:


6

説明されているアプローチは、理論的に最適ではない場合があります。これは、作者に役立つかもしれない単純で実用的なソリューションです。私はいつもそれが広く知られている民間伝承だと思っていたので、参考文献を提供することはできませんが、奇妙なことに、答えに誰もそれを投稿しませんでした。だから私はそれをします。

無向ネットワークがあると仮定します。頂点/アークの挿入/削除が簡単にできるデータ構造に保存されていると仮定します。時々、残余ネットワークG fを使用します(つまり、更新された容量c f = c fを使用)。G=(V,E,c)Gfcf=cf

最初の部分は、頂点の挿入/削除を処理する方法です。挿入は多かれ少なかれ簡単です:

  1. 対応するエッジを持つ新しい頂点を残差ネットワークに追加します。
  2. 選択したmaxflowアルゴリズムを使用して、更新された残余ネットワークの最大フローを見つけます。

削除の場合、事態はより複雑になりました。我々は頂点分割想像我々は2つの半分に削除しようとしていますが、V I NV O U T全てに、弧をポイントするようなV iのnは、すべてのアウトのアークから行くV oをU トンと、この新しい頂点が接続されています無限の容量の弧によって。この場合、vの削除は、v i nv o u tの間のアークの削除と同等です。この場合はどうなりますか?f vで示しましょうvvinvoutvinvoutvvinvoutfv頂点を通過するフロー。次に、V 、IをNの過剰経験するのF Vのフロー単位及びV O U Tが不足経験するF Vの右削除後流ユニット(フロー制約が明らかに破壊されます)。フローの制約を再び保持するには、フローを再配置する必要がありますが、元のフローの値をできるだけ高く維持する必要もあります。合計フローを減少させずに再配置できるかどうかを最初に見てみましょう。それをチェックするには、maxflow見つけるFのVからV iのn個V O Uをvvinfvvoutfvfv~vin「切り取られた」残余ネットワークの t(つまり、 v i n v o u tを接続するアークなし)。明らかに f vでバインドする必要があります。それに等しいことが起こる場合は、F 、V、我々はラッキーです:我々は通過して流れに再割り当てしているV総流量が変更されていないようにします。他の場合には総流量は、「無駄」の過剰によって減少されなければならないΔ= F V - FのVのユニット。それを行うには、一時的にstを接続しますvoutvinvoutfvfvvΔ=fvfv~st無限の容量のアークによって、からv o u tに maxflowアルゴリズムを再度実行します(Δでフローをバインドする必要があります)。これにより、残留ネットワークが修正され、フローの制約が再び保持され、合計フローが自動的にΔ減少します。vinvoutΔΔ

このような更新の時間の複雑さは、使用するmaxflowアルゴリズムに依存する場合があります。最悪の場合はかなり悪いかもしれませんが、完全に再計算するよりはましです。

2番目の部分は、使用するmaxflowアルゴリズムです。私が理解している限り、著者はモバイルプラットフォームで実行するために小さな隠された定数を持つ非常に複雑な(しかしまだ効率的な)アルゴリズムを必要としません。彼の最初のFord-Fulkersonの選択(エドモンズ-カープであると思います)は、この観点からはそれほど悪くないようです。しかし、他にもいくつかの可能性があります。最初に試すことをお勧めするのは、Dinicのアルゴリズムのバリアントです。これは、実際には非常に高速で、非常に簡単な方法で実装できるためです。他のオプションには、O | E |O(|V|2|E|)、結局のところ、ヒューリスティックを使用したプッシュリラベルのさまざまなバージョン。とにかく、パフォーマンスはユースケースに依存するため、作成者は経験的に最適なものを見つける必要があります。O(|E|2logCmax)


最後のvznの答えを読んだ後、このページ90で説明した同様のアプローチを見つけました。
ドミトロKorduban

私がすることで、ノードを削除するには理解したようあなたは残留グラフに流れて計算しますが、私はそれが真実ではないと思う、実際には残留グラフにあなたが計算に使用されるいくつかのエッジを持つF Vを、あなたはこのエッジに余分な容量を追加する必要があります、その後、計算FのVは、その後、使用してΔをfv~fvfv~Δ
サイード

もしからの流れの1部を押すとUは、減少のC FV Uを 1によって、および増加のC FU V 1によって流れが反対称であるため(F V U = - f u v )。これは真の残差グラフを定義するため、すべてがうまく機能します。vucf(v,u)cf(u,v)f(v,u)=f(u,v)
ドミトロKorduban

エッジキャパシティを変更したい場合、これをどのように行うのでしょうか。
チェット

-1

新しい情報を考慮に入れ、以前のトリッキーな誤ったスタート/レッドニシンの参照(mea culpa)を避けるために、これに関するいくつかの新しい参照を示します。

ロバストな最小カットの計算を拡張して、最大フロー問題のオンラインシーケンスを 迅速に解決する Doug AltnerおよびÖzlemErgun

このref は、MFPのオンラインシーケンスと「ウォームスタート」、つまり、以前のMFPへの増分chgsに基づいたビルドを考慮します。「ブラックボックスMFPソルバーを使用する同様のコードと比較すると、アルゴリズムが実行時間を大幅に短縮することを示しています。特に、ロバストな最小カットのアルゴリズムが4秒以上必要なインスタンスを数秒で解決できることを示しますブラックボックス最大フローソルバーを使用して数時間。」


最大流量に関連する問題の進歩 Altner、Douglas S.、georgia tech

この2008年の博士論文(ダウンロード可能なPDF)では、著者は、新しい頂点(複数の新しいアーク)を追加する問題に「十分に近い」と思われるアークを段階的に追加する問題を検討しています。

このrefの多くは、アブストラクトの最初の部分で述べたように、ネットワークの一部(カット/「阻止」)の削除に関係しています。

esp「IV最大フローのオンラインシーケンスの解決。。。。。。p63」を参照してください。

p 63「ただし、この章の目的は、ブラックボックス最大フローソルバーを繰り返し使用して多数のMFPを解決すると、膨大な数の不必要な計算につながる可能性があることを読者に納得させることです。」

p66「前述のアプリケーションでは、MFPは通常トポロジ的に類似しています。つまり、シーケンス内の次のMFPは、少数のアークを追加または削除するか、ローカライズされたアークセットの容量を予測可能に変更することにより、前のMFPと異なります。 、これらのインスタンスを解決する場合、以前の問題の解決策を超えて何かを保存するために必要な時間とスペースは通常保証されません。」

p67作成者もここで「ウォームスタート」アプローチを使用します。「最適化問題のオンラインシーケンス全体を迅速に解決するための効果的な戦略は、効率的な再最適化ヒューリスティックを開発することです。このため、効率的なウォームスタート用に設計された修正最大フローアルゴリズムを開発します。」

特定のインクリメンタルnew-arc問題があるesp p71を参照してください。

新しいアーク最大流量再最適化問題(NAMFRP)

著者は、より一般的な問題p67

最大流量再最適化問題(MFROP)
最大流量単一アーク再最適化問題(MFSAROP)


-3

いくつかのクイック検索から、オンライン版は活発な研究分野のようです。文献検索の絞り込みに役立つ可能性のあるアプリケーション領域については言及しないでください。1つの選択肢は、最新または最新のイノベーションがあるアプリケーション領域を探すことです。したがって、ビジョンシステムでのインクリメンタル最大フローとそのためのいくつかのアルゴリズムのアプリケーションがあります。Microsoft Research Labsで、インクリメンタル幅優先検索による最大フローを試してください。この論文のイントロを言い換えると、どうやら視覚の場合、ボイコフとコルモゴロフのアルゴリズムはうまく機能し、視覚アプリケーション以外ではパフォーマンスが悪いかもしれないが、指数関数的な時間反例は知られていない。そのため、データに対してB&Kアルゴリズムを試して、それがどのように実行されるかを見てみる価値があります。

グラフのエッジの数が線形であるインクリメンタルアルゴリズムは十分な速度ではないと言っているようです。しかし、それはかなり高い効率ではありませんか?いくつのエッジを扱っていますか?多分アプローチは、それが高価であるか重要な要因である場合、グラフを走査するコストを減らすことかもしれません(例えば、dbに保存されたグラフとメモリに保存されたグラフ)

最大フローの非インクリメンタルアルゴリズムはPであるが、インクリメンタルバージョンはNP完全であると主張する興味深い論文です。「我々の知る限り、我々の結果は、インクリメンタルバージョンがNP完全であるP時間問題を最初に発見したものです。」

ハートライン、シャープによるインクリメンタルフロー


ありがとう、私はあなたの参考論文を読んでいませんでした、私はそれらを見ていきます(私は前にいくつかの論文を見て、それらは役に立たないことがわかりました)が、私の問題領域については、それは株式マーケティングの実際の作業状況の問題です。この問題を解決する必要があるとわかったときに何が起こったのかを言うのは少し複雑です。実際、一見難しいとは思っていませんでしたが、コードを試してみるとそれほど簡単ではないことがわかりました。このアルゴリズムは携帯電話で実行されますが、それほど高速ではありません(顧客は私のアルゴリズムを好まない:)。また、新しいノードではエッジが多すぎる場合があります。これがボトルネックです。
サイード

面白い。おそらく、限られた処理能力と高速更新の必要性に基づいたヒューリスティックを使用する必要があるように聞こえます。代わりに、処理を「クライアント」(あなたの場合は電話)からサーバーに移動できますか?すべてのクライアントが問題の異なるバージョン(つまり、異なるデータ)を計算する必要がありますか?
vzn

イランでは、最大の問題はインターネット接続速度です。そのため、サーバー側に移動することはできません。それがうまくいけば(良い速度)、確かに再計算は悪くないでしょう。
サイード

6
これが元の質問にどのように答えるかはわかりません。これは、ノードとエッジの追加によって時間とともに進化するグラフに関するものです。最初の論文では、標準的なワンショットmaxflow問題のインクリメンタルアルゴリズムについて説明します。2番目の論文は、別の「増分最大流量」問題に関する論文を記述しています。この問題では、エッジのセットは固定されていますが、その容量は時間とともに増加します。
ジェフ

1
@Jɛff E、はい、あなたは正しいです:)実際にはその前に私は参照された論文と同様の論文を見ますが、あなたがそれらが私の問題に関連していないと言ったように、私が今まで見る最も近い論文は私が参照したものです。
サイード

-5

別の可能性/方向は、「最大フローのための最も効率的なアルゴリズムの1つ」であり、データに応じてより複雑なプロファイルを持つことができるプッシュリラベル最大フローアルゴリズムです。例えば、ウィキペディアのページが述べているように

FIFO頂点選択ルールを使用した実装には OV3 実行時間、最高のアクティブな頂点選択ルールが提供します OV2E)複雑さ、およびSleatorおよびTarjanの動的ツリーデータ構造を使用した実装は、 OVElogV2/E時間。エドモンズ・カープよりも漸近的に効率的


3
繰り返しますが、この回答が投稿された質問にどのように関連しているかはわかりません。プッシュラベルは、標準の最大流量問題に答えるためのよく知られた教科書戦略です。
ジェフ

フォード・フルカーソンもそうですよね?&OPはより良いものを求めます。push-relabelがford-fulkersonよりも悪いことを証明する何かを知っていますか?明確ではないOPはプッシュ再ラベルに精通しています。そうですね、教科書に登場するアルゴリズムは、ここで答えを拒否するための直接的な基準ではありませんよね?
vzn

3
実はそうです; 標準的な教科書(またはウィキペディア)で回答される質問は、研究レベルではありません。ただし、増分フローについて最初に投稿された質問は興味深いものであり、間違いなく範囲内です。(決定的な答えの欠如は、正しい答えが「良い質問。誰も知らない」かもしれないことを示唆しています。)
ジェフ

vzn、あなたの貢献に感謝しますが、「push-relabelがford-fulkersonよりも悪いことを証明する何かを知っていますか」は答えとしてそれを投稿する正当な理由ではありません。 Ford-Falkersonが言うのは良いことではありませんが、私は個人的にはFord-Falkersonが好きで、単純さ、低い定数ファクター、そして過去から知っています。しかし、私が言ったように、私はそれがすべての場合に良い選択肢だとは言えませんでした。また、これらのアルゴリズムは単純に比較できるものではなく、実用的なテストが必要です。
サイード

ptを見てください。データに対して適切に実行されていない最大フローアルゴリズムが1つある場合、異なるデータプロファイルに最適化されたものがかなりあるため、パフォーマンスが良いと言われる別のespアルゴリズムを試してください。いいえ、それはオンライン/「頂点増分」ではありませんが、代替がない場合はオフラインの場合のほうがパフォーマンスが向上する可能性があります。オンラインバージョンは、上記のとおり存在しますが、実装がかなり困難になる可能性があります
...-vzn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.