分支限界法


上一章:貪心算法和回溯法 http://www.cnblogs.com/suxi-blog/articles/6239595.html 

1.回溯法是深度優先策略遍歷問題的解空間樹,在遍歷過程中,應用約束條件、目標函數等剪枝函數實行剪枝。分支限界法按照廣度優先策略便利問題的解空間樹,對於已經處理過的每個節點根據限界函數估算目標函數的可能取值,從中選取使目標函數取得極值的節點先進行廣度優先搜索,從而不斷的調整搜索的方向,盡快的找到問題的解。分支限界法適用於求解最優問題。

  2.分支限界法首先的確定一個合理的限界函數,並根據限界函數確定函數的界【down,up】(對於求解最小的問題,根據限界函數確定目標函數的下界down,目標函數的上界可以使用某種啟發方式得到,如貪心算法。而對於球最大問題這兩個就對調一下就行了),然后就按照廣度優先策略遍歷問題的解空間樹,在分支節點上,依次搜索該節點的所有孩子節點,分別估算這些孩子節點的目標函數的可能取值(對於最小問題,估算節點的下界;對於最大問題就估算節點的上界),如果某孩子節點的目標函數可能取得值超出目標函數的界,則廢棄;否則將其加入待處理節點表中(下面就簡稱為PT表),然后從表中選取使目標函數取得極值的節點成為當前擴展點。重復上述過程,直到找到最優解。

  3.與回溯法相比,分支限界法可以根據限界函數不斷調整搜索的方向,選擇最優可能取得最優解的子樹優先進行搜索,從而盡快的找到問題的解。

分支限界法的一般過程:

(1)根據限界函數確定目標函數的界【down,up】

(2)將待處理節點表PT初始化為空

(3)對根節點的每個孩子節點x執行下列操作

a.估算節點x的目標函數的value

b.若(value>down),則將節點x加入表PT中

(4)循環直到某個葉子節點的目標函數值在表PT中最大

a.i=表PT中最大節點

b.對節點i的每個孩子節點x執行下列操作

  估算節點x的目標函數值value;

  若(value>down),則將節點x加入表PT中

  若(節點x是葉子節點且節點x的value值在表PT中最大),則節點x為對應的解輸出,算法結束

  若(節點x是葉子節點但節點x的value在表PT中不是最大),則令down=value,並且將表PT所有小於value的節點刪除。

(對於求最小也相同的步驟)

4.應用分支限界法的關鍵的問題是:

(1)如何確定合適的限界函數

(2)如何組織待處理節點表:表PT可以采用堆的形式,也可以采用優先隊列的形式存儲。

(3)如何確定最優解中的各個分量

  a.對每個擴展節點保存根結點到該節點

  b.在搜索過程中構建搜索經過的樹結構,在求最優解時,從葉子節點不斷回溯到根節點,以確定最優解中的各個分量。

-------------------------------------------------------------------------------------------------------------------------

暫時算法我就做到這里,后面會繼續進一步更新,畢竟還在學習中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM