ブランチとバインドされたアルゴリズムに関するテストがあります。このアルゴリズムがどのように機能するかを理論的に理解していますが、このアルゴリズムを実際に実装する方法を示す例は見つかりませんでした。
このような例をいくつか見つけました が、それでも混乱しています。巡回セールスマンの問題も探しましたが、理解できませんでした。
私が必要とするのは、いくつかの問題と、これらの問題をブランチとバウンドを使用してどのように解決できるかです。
ブランチとバインドされたアルゴリズムに関するテストがあります。このアルゴリズムがどのように機能するかを理論的に理解していますが、このアルゴリズムを実際に実装する方法を示す例は見つかりませんでした。
このような例をいくつか見つけました が、それでも混乱しています。巡回セールスマンの問題も探しましたが、理解できませんでした。
私が必要とするのは、いくつかの問題と、これらの問題をブランチとバウンドを使用してどのように解決できるかです。
回答:
Branch and Boundをナップザックに適用してみましょう。うまくいけば、これによってコンセプトが明確になります。
我々は持っているの項目は、ラベル1をへて、N。V iが値であるI番目の項目、及びW I自重。合計で最大Tの重量を含めることができるナップザックにそれらを適合させようとし、ナップザックに入れたアイテムの値の合計を最大化しようとします。
これは「境界」と呼ばれることに注意してください。通常、これには何らかの下限または上限が含まれるためです。基準については、「残りのすべてのアイテムを入れても、入れたアイテムの値は最適な構成を超えません。私はこれまでに見つけた '、これまでの最高の構成の値は、最高の構成の下限であるため、この下限を超えられないものはすべて失敗する運命にあります。
「境界」部分を好きなだけ複雑にすることができます。たとえば、整数プログラミングの問題は緩和を使用して解決されることがよくあります。プログラムを線形プログラムに緩和します。これは多項式時間で解くことができ、それからとにかくうまくいかないバイナリ変数の多くのケースを捨てることができます。次に、残りのオプションに分岐します。
Branch and Boundは通常、実際には速度の向上のみを提供しますが、理論的にはそうではないことに注意してください。ヒューリスティックを使用して切り取られた検索ツリーの正確な量を正確に示すことは困難です。これは、そのような問題に対して実際に使用されているさまざまなヒューリスティックの数によって証明されています。運が悪いと、境界がたくさんあっても、残っている検索ツリーは巨大なままです。
考えてみましょうスケジューリング、マシンに一定の期間と期限付きジョブを割り当てるタスクを。離散時間を想定しています。そのような問題の多くはNP(O)困難です。
この問題の決定版はNP困難です。これは、3PARTITIONからの削減で確認できます。
興味深いことに、プリエンプションを許可する場合、つまりアクティブなジョブをスワップアウトする場合、問題は(変更された期日の)最早期日最初のヒューリスティックによって2次時間で解決できます。このバリアントの最適なソリューションは、元の問題の最適なソリューションよりも悪くなることはありません。
ここで、この問題にBranch&Boundを適用するために、いくつかのパラメーターを修正する必要があります。
B&Bのすべてのアプリケーションでこれを行う必要があります。
上記のようにB&Bを実行すると、次のようになります。
このGIFはループしません。新しいタブに再読み込みして、最初から確認してください。
[ ソース ] [ 静的バージョン ]
41個のノードのうち、4個だけが適切にアクセスされ、10個のみが計算された下限に注意してください。