ブランチとバウンドの説明


9

ブランチとバインドされたアルゴリズムに関するテストがあります。このアルゴリズムがどのように機能するかを理論的に理解していますが、このアルゴリズムを実際に実装する方法を示す例は見つかりませんでした。

このような例をいくつか見つけました が、それでも混乱しています。巡回セールスマンの問題も探しましたが、理解できませんでした。

私が必要とするのは、いくつかの問題と、これらの問題をブランチとバウンドを使用してどのように解決できるかです。


1
何がわかりにくかったですか?以前にバックトラックを試みましたか?

うん、やってみた。B&Bの問題は、B&Bで解決できる問題が発生した場合、各ノードの下限を取得する方法と目的関数を取得する方法がわからないことです。また、私が各下限と比較する最高の最初の値は何ですか?
MR.NASS 2012

2
@ MR.NASS最後のコメントで正確に何を言っているのかわかりません。説明させてください。B&Bは、検索ツリーを枝刈りする方法です。目的関数を最適化する必要がある問題に適用できます。これは通常、離散または組み合わせ最適化問題に適用されます。各ステップで、残りのすべての可能な解の目的関数の下限を見つけようとします。下限が現在の最良のソリューションよりも高い場合、スコアが低いソリューションは存在しない可能性があるため、検索とバックトラック(検索ツリーのプルーニング)を停止できます。
ジョージ

2
通常、問題の緩和バージョンを解決して下限を取得します。混合整数プログラムの場合、これは通常線形計画法の緩和です。
オプト

2
@ MR.NASSこれは目的関数に依存します。シドが言ったように、あなたは通常与えられた問題の緩和されたバージョンを解決します。通常、最初の問題を適切に近似し、効率的に解決できるリラックスバージョンを使用します。リラックスしたバージョンでは、適切に機能するために、実際の下限と同じくらい高い下限を指定する必要があることに注意してください。別の例:B&BメソッドでMAXSATを解くことを考えます。与えられた部分的な真理値の割り当てに対して、満たされた句の数を簡単に計算できます。上限(これは最大化の問題であるため)...
ジョージ

回答:


10

Branch and Boundをナップザックに適用してみましょう。うまくいけば、これによってコンセプトが明確になります。

我々は持っているの項目は、ラベル1をへて、NV iが値であるI番目の項目、及びW I自重。合計で最大Tの重量を含めることができるナップザックにそれらを適合させようとし、ナップザックに入れたアイテムの値の合計を最大化しようとします。n1nviiwiT

v1n1v1n1

iinO(2n)

Tn/2n/2+1nn/2+1n2n/2

dO(2d)

これは「境界」と呼ばれることに注意してください。通常、これには何らかの下限または上限が含まれるためです。基準については、「残りのすべてのアイテムを入れても、入れたアイテムの値は最適な構成を超えません。私はこれまでに見つけた '、これまでの最高の構成の値は、最高の構成の下限であるため、この下限を超えられないものはすべて失敗する運命にあります。

「境界」部分を好きなだけ複雑にすることができます。たとえば、整数プログラミングの問題は緩和を使用して解決されることがよくあります。プログラムを線形プログラムに緩和します。これは多項式時間で解くことができ、それからとにかくうまくいかないバイナリ変数の多くのケースを捨てることができます。次に、残りのオプションに分岐します。

Branch and Boundは通常、実際には速度の向上のみを提供しますが、理論的にはそうではないことに注意してください。ヒューリスティックを使用して切り取られた検索ツリーの正確な量を正確に示すことは困難です。これは、そのような問題に対して実際に使用されているさまざまなヒューリスティックの数によって証明されています。運が悪いと、境界がたくさんあっても、残っている検索ツリーは巨大なままです。


4

考えてみましょうスケジューリング、マシンに一定の期間と期限付きジョブを割り当てるタスクを。離散時間を想定しています。そのような問題の多くはNP(O)困難です。

1riLmax

  • 1台のマシンで
  • リリース日と私たちの問題
  • Lmax

この問題の決定版はNP困難です。これは、3PARTITIONからの削減で確認できます。

興味深いことに、プリエンプションを許可する場合、つまりアクティブなジョブをスワップアウトする場合、問題は(変更された期日の)最早期日最初のヒューリスティックによって2次時間で解決できます。このバリアントの最適なソリューションは、元の問題の最適なソリューションよりも悪くなることはありません。

ここで、この問題にBranch&Boundを適用するために、いくつかのパラメーターを修正する必要があります。

  • プリエンプションを許可し、EDDを使用して下限を計算します。
  • 予定外の仕事はすべて次のように修正して分岐します。
  • 最初に小さい方の下限のある子供に行きます。

B&Bのすべてのアプリケーションでこれを行う必要があります。


1riLmax

i1234pi4265ri0135di8121110

piridi

上記のようにB&Bを実行すると、次のようになります。

アルゴリズム
このGIFはループしません。新しいタブに再読み込みして、最初から確認してください。
[ ソース ] [ 静的バージョン ]

41個のノードのうち、4個だけが適切にアクセスされ、10個のみが計算された下限に注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.