Branch and Bound Algorithm

Nerd~發表於2020-12-23

分支限界演算法

分支限界演算法是另一種系統搜尋解空間的方法。

分支限界演算法也常把解空間組織成樹的結構(常撿的,子集樹和排列樹),一般採用廣度優先(BFS)或最小耗費來搜尋樹

主要思想

對一個擴充套件結點,一次生成其所有的子節點,將不可能產生可行解(或最優解)的結點捨去,其餘的記入活結點表;按照一定規則,從活結點表中取出下一個結點作為新的擴充套件結點,重複展開,直到得到可行解(或最優解)或活結點表為空

限界函式

限界函式可以在求解最優解問題時,用來加速搜尋
函式給出每個可行結點對應子樹能獲得的最大價值的上界,如果該上界沒有比當前的最優值更大,則說明該子樹不會產生問題的最優解,可以剪去

兩種常見的分支限界

先進先出(FIFO)

從活結點表中取出結點的順序與加入的順序相同,活結點表採用佇列實現

最小耗費或最大收益

每個活結點有一個對應的最小耗費(或最大收益),每次取出時選擇最優的結點進行展開

分支限界和回溯

①分支限界法的結果是求出滿足的一組可行解(或可行解中的一個最優解);回溯法的結果是求出所有滿足的可行解
②搜尋樹的方法不同,分支限界通常用廣度優先(BFS)或最小耗費;回溯通常用深度優先(DFS)
③擴充套件結點的展開方式不同,分支限界的結點只有一次成為活結點的機會
④分支限界演算法對空間的需求比回溯演算法大得多(活結點表),因此當記憶體容量有限時,使用回溯演算法常常更容易成功

相關文章