分岐結合メソッド - 読み込みの問題

前節で分枝限定法とは何かを学習しましたが、いつものように、例に基づいて分枝限定法の考え方とパターンをまとめます。

簡単に言うと、分岐限定法は実際には解空間ツリーの幅優先探索であり、その核心は分岐と限界という 2 つの単語に分解できることがわかりました。分岐は幅に従って拡張される可能な分岐を表します。 、limit は指定したものを表します。枝刈りの上限と下限の条件。実行可能なノードはライブ ノード テーブルに追加され、実行不可能なノードは出力条件を満たすブランチが見つかるまで枝刈りされます。


読み込みの問題を確認してみましょう。 

 これはサブセット ツリーの問題です。バックトラッキング法を使用してこの問題を解決したとき、解空間全体を順番に走査し、制限条件に従って枝刈りを行ったことを思い出してください。次に、分岐結合法を使用してこれを解決する必要があるため、この問題では分岐を把握する必要があります。ルート ノードから開始するのは c1c2c3 です。c1 が選択されている場合、分岐は c2c3 であり、c1c2 が選択されている場合、ブランチはc3です。もちろん、選択しないこともできます。制限は、合計重量が c を超えないことを規定し、最大の bestw を記録する必要があります。

 (MaxLoading は 1 回だけ実行されるわけではなく、サブセット ツリー全体を走査する必要があることに注意してください)

 改良後、枝刈り条件が追加され、現在の重み Ew + 残りの重み r <= bestw を枝刈りします。すべてを加算しても bestw を超えないため、再度トラバースする必要はありません。


上記コードはキュー型分岐拘束方式ですが、優先キュー型分岐拘束方式もあります。

ネットで写真を見つけました

 簡単に言えば、商品に関しては、それを選ぶか選ばないかだけです。できるだけ重い荷物を積みたい場合は、その上限をできるだけ大きくする必要があります。図の例では、up = 選択したすべての商品の重量 + 利用可能な商品の重量が最大重量の上限を表すことがわかります。したがって、最適な解を見つけたい場合は、以下から開始する必要があります。上記 Jie Da のサブツリーを検索します。このアップの値は、特定の製品が選択されないことがわかっている場合にのみ重みから減算されます。たとえば、2 番目のレイヤーでは 8+6=14>c1=12 がわかります。過度の剪定の場合は、右のサブツリーに直接移動します。3 番目のレベルでは、左側のサブツリーの上限は大きくなりますが、up=11 の場合、up の最終的な最大値は右側のサブツリーにあることがわかります。これが、A から C へのパスをトラバースしない理由です。ここの C の Up も 11 ですが、これは記録した bestw=11 より大きくないため (bestw はリーフ ノードの場合にのみ更新されます)、枝刈りされます。

 


これら 2 つの質問から、分岐限定メソッドの一般的なルールを要約します。

ブランチ アンド バウンド メソッドの概念はブランチとリミットです。ブランチはノードを展開する方法を選択し、リミットは定義する必要がある上限と下限です。理解が得られたかどうかを判断するには、次のような多くの条件があります。

たとえば、ソリューションが上限に達した場合、それはすでに最適であり、それが私たちが探しているソリューションであることを意味します。

特定の分岐の上限が全体の下限よりも低い場合、それはもはや解の範囲内にないことを意味し、枝刈りする必要があります。

優先キューは実際には制限の動的な更新を表します。各層の上限または下限はリアルタイムで更新されます。毎回探索する最適解を新しい上限または下限として使用できます。このようにして、利点は、パスの一部を直接プルーニングできるため、計算量が少なくなることです。

おすすめ

転載: blog.csdn.net/milu_ELK/article/details/127956343