支限界法思路的簡單描述是:把問題的解空間轉化成了圖或者樹的結構表示,然後使用廣度優先搜尋策略進行遍歷,遍歷的過程中記錄和尋找所有可行解或者最優解。
類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出t中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種意義下的最優解。
由於求解目標不同,導致分支限界法與回溯法在解空間樹t上的搜尋方式也不相同。回溯法以深度優先的方式搜尋解空間樹t,而分支限界法則以廣度優先或以最小耗費優先的方式搜尋解空間樹t。
1)fifo分支限界法(佇列式分支限界法)
搜尋策略:一開始,根結點是唯一的活結點,根結點入隊。從活結點隊中取出根結點後,作為當前擴充套件結點。對當前擴充套件結點,先從左到右地產生它的所有兒子,用約束條件檢查,把所有滿足約束函式的兒子加入活結點佇列中。再從活結點表中取出隊首結點(隊中最先進來的結點)為當前擴充套件結點,……,直到找到乙個解或活結點隊列為空為止。
2)lc(least cost)分支限界法(優先佇列式分支限界法)
基本思想:為了加速搜尋的程序,應採用有效地方式選擇活結點進行擴充套件。按照優先佇列中規定的優先順序選取優先順序最高的結點成為當前擴充套件結點。
搜尋策略:對每一活結點計算乙個優先順序(某些資訊的函式值),並根據這些優先順序;從當前活結點表中優先選擇乙個優先順序最高(最有利)的結點作為擴充套件結點,使搜尋朝著解空間樹上有最優解的分支推進,以便盡快地找出乙個最優解。再從活結點表中下乙個優先級別最高的結點為當前擴充套件結點,……,直到找到乙個解或活結點隊列為空為止。
在擴充套件結點處,先生成其所有的兒子結點(分支),然後再從當前的活結點表中選擇下乙個擴充套件對點。為了有效地選擇下一擴充套件結點,以加速搜尋的程序,在每一活結點處,計算乙個函式值(限界),並根據這些已計算出的函式值,從當前活結點表中選擇乙個最有利的結點作為擴充套件結點,使搜尋朝著解空間樹上有最優解的分支推進,以便盡快地找出乙個最優解。
分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜尋問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹。在搜尋問題的解空間樹時,分支限界法與回溯法對當前擴充套件結點所使用的擴充套件方式不同。在分支限界法中,每乙個活結點只有一次機會成為擴充套件結點。活結點一旦成為擴充套件結點,就一次性產生其所有兒子結點。在這些兒子結點中,那些導致不可行解或導致非最優解的兒子結點被捨棄,其餘兒子結點被子加入活結點表中。此後,從活結點表中取下一結點成為當前擴充套件結點,並重複上述結點擴充套件過程。這個過程一直持續到找到所求的解或活結點表為空時為止。
1) 首先將問題的解空間轉化成圖或者樹的結構表示,然後維護一張活節點表。
2) 初始時,將根節點加入活節點表
3) 當活節點表不空,從活節點表中取出乙個節點,成為當前擴充套件節點。如果表為空,跳轉至步驟6結束。
4) 判斷當前擴充套件節點是否得到了乙個可行解或更優解,如果是,記錄或更新問題的解。
5)將當前擴充套件節點的所有可行子節點一次性全部生成,加入到活節點表中。跳轉到步驟3
活節點表的資料結構可以是fifo佇列或者優先權佇列。
回溯法深度優先搜尋堆疊活結點的所有可行子結點被遍歷後才被從棧中彈出找出滿足約束條件的所有解
分支限界法廣度優先或最小消耗優先搜尋佇列、優先佇列每個結點只有一次成為活結點的機會找出滿足約束條件的乙個解或特定意義下的最優解
演算法分析 分支界限法
二 分支限界法的一般過程 由於求解目標不同,導致分支限界法與回溯法在解空間樹t上的搜尋方式也不相同。回溯法以深度優先的方式搜尋解空間樹t,而分支限界法則以廣度優先或以最小耗費優先的方式搜尋解空間樹t。分支限界法的搜尋策略是 在擴充套件結點處,先生成其所有的兒子結點 分支 然後再從當前的活結點表中選擇...
008 演算法 分支界限法
一 概念 與貪婪法一樣,這種方法也是用來為組合優化問題設計求解演算法的,所不同的是它在問題的整個可能解空間搜尋,所設計出來的演算法雖然時間複雜度比貪婪演算法高,但它的優點是與窮舉法類似,都能保證求出問題的最佳解,而且這種方法不是盲目的窮舉搜尋,而是在搜尋中通過界限,可以中途停止對某些不可能得到的最優...
分支界限法
在當前節點 擴充套件節點 處,先生成其所有的兒子節點 分支 然後再從當前的活節點 當前節點的子節點 表中選擇下乙個擴充套件節點。為了有效地選擇下乙個擴充套件節點,加速搜尋的程序,在每乙個活節點處,計算乙個函式值 限界 並根據函式值,從當前活節點表中選擇乙個最有利的節點作為擴充套件節點,使搜尋朝著解空...