回溯演算法與分支限界法

2021-08-07 18:44:07 字數 1457 閱讀 6723

確定了解空間的組織結構以後,回溯法從開始結點(根結點)出發,以深度優先方式搜尋整個解空間。這個開始結點為活結點,同時也成為當前結點的擴充套件結點。在當前的擴充套件結點處,搜尋向縱深方向移至乙個新結點。這個結點就成為新的活結點,並成為當前擴充套件結點。如果在當前的擴充套件結點處不能向縱深方向移動,則當前擴充套件結點就成為死結點。此時,應往回移動(回溯)至最近的乙個活結點處,並使這個結點成為當前的擴充套件結點。回溯法以這種工作方式遞迴的在解空間中搜尋,直至找到所要求的解或解空間中無活結點時為止。
回溯法解題通常包含以下三個步驟:

(1)針對所給問題,定義問題的解空間。

(2)確定易於搜尋的解空間結構。

(3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。

遞迴回溯:

void backtrace(int t) 

}}

迭代回溯:

void iterativebacktrace(void) 

}else t− −;}}

}

分支限界法首先確定乙個合理的限界函式,並根據限界函式確定目標函式的界[down, up];然後按照廣度優先策略遍歷問題的解空間樹,在某一分支上,依次搜尋該結點的所有孩子結點,分別估算這些孩子結點的目標函式的可能取值(對最小化問題,估算結點的down,對最大化問題,估算結點的up)。如果某孩子結點的目標函式值超出目標函式的界,則將其丟棄(從此結點生成的解不會比目前已得的更好),否則入待處理表。
分支限界法的設計思路:

設求解最大化問題,解向量為x=(x1,…,xn),xi的取值範圍為si,|si|=ri。在使用分支限界搜尋問題的解空間樹時,先根據限界函式估算目標函式的界[down, up],然後從根結點出發,擴充套件根結點的r1個孩子結點,從而構成分量x1的r1種可能的取值方式。

對這r1個孩子結點分別估算可能的目標函式bound(x1),其含義:以該結點為根的子樹所有可能的取值不大於bound(x1),即:

bound(x1)≥bound(x1,x2)≥…≥ bound(x1,…,xn)

若某孩子結點的目標函式值超出目標函式的下界,則將該孩子結點丟棄;否則,將該孩子結點儲存在待處理結點表pt中。

再取pt表中目標函式極大值結點作為擴充套件的根結點,重複上述。

直到乙個葉子結點時的可行解x=(x1,…,xn),及目標函式值bound(x1,…,xn)。

分支限界法與回溯法的不同:

*(1)求解目標:回溯法的求解目標是找出解空間樹中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出在某種意義下的最優解。

(2)搜尋方式的不同:回溯法以深度優先的方式搜尋解空間樹,而分支限界法則以廣度優先或以最小耗費優先的方式搜尋解空間樹。*

回溯法與分支限界演算法

1 概念 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術...

回溯法與分支限界法 裝載問題

分支限界法和回溯法都屬於搜尋演算法,但是他們的搜尋策略是不同的。分支限界法 廣度優先搜尋 bfs 剪枝函式,回溯法 深度優先搜尋 dfs 剪枝函式 回溯法 找出滿足約束條件的所有解 分枝限界法 找出滿足約束條件的乙個解或特定意義下的最優解 裝載問題 有兩艘船,載重量分別是c1 c2,n個貨櫃,重量是...

回溯與分支限界

代價函式 當前取得的價值 後面可以取得的最大價值 如果這個價值比之前得到的路徑的價值的最大值都小的話,那麼這個分支不再需要繼續延伸 分支策略 分支較少的結點先展開 預計可以得到較多解的結點先展開 對稱性 比如n皇后問題,可以又中線縱軸分成等價的兩部分的搜尋空間 裝箱問題中,可以以箱子的角度來回溯,也...