算法设计之—常用算法之-分支界定法
???????? 在進行機器學習特診選擇的時候,一種不需要進行遍歷仍能取得最優解的方法為分支定界(branch and bound)法。這是一種自頂向下的方法,即從包含所有候選特征開始,逐步去掉不被選擇的特征。此種方法具有回溯的過程,能夠考慮所有可能的特征組合。
分支定界法:
??????? 原理:分支界定法就是帶剪枝技巧的搜索策略,通過預判和估算,一旦發現某個子解空間已經不可能存在可行解時,立即停止對此子解空間的搜索。
??????? 類似于回溯法,也是一種在問題的解空間樹T上搜索問題解的算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解。
?
分析:分支界定法通常不能降低搜索解空間的數量級,但通過合理的選擇估算函數和分布策略,往往能極高地提高搜索效率。
????? 算法的技巧性很強,不通類型的問題的解法也不相同。
所謂“分支”就是采用廣度優先的策略,依次搜索E-結點的所有分支,也就是所有相鄰結點,拋棄不滿足約束條件的結點(剪枝),其余結點加入活結點表。然后從表中選擇一個結點作為下一個E-結點,繼續搜索。
?????? 選擇下一個E-結點的方式不同,則會有幾種不同的分支搜索方式。
?? 1)FIFO搜索
?? 2)LIFO搜索
?? 3)優先隊列式搜索
?
與回朔法的方法區別:
?
????????? 由于求解目標不同,導致分支限界法與回溯法在解空間樹T上的搜索方式也不相同。回溯法以深度優先的方式搜索解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜索解空間樹T。
?????? 分支限界法的搜索策略是:在擴展結點處,先生成其所有的兒子結點(分支),然后再從當前的活結點表中選擇下一個擴展對點。為了有效地選擇下一擴展結點,以加速搜索的進程,在每一活結點處,計算一個函數值(限界),并根據這些已計算出的函數值,從當前活結點表中選擇一個最有利的結點作為擴展結點,使搜索朝著解空間樹上有最優解的分支推進,以便盡快地找出一個最優解。
??????? 分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜索問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹。在搜索問題的解空間樹時,分支限界法與回溯法對當前擴展結點所使用的擴展方式不同。在分支限界法中,每一個活結點只有一次機會成為擴展結點。活結點一旦成為擴展結點,就一次性產生其所有子結點。在這些子結點中,那些導致不可行解或導致非最優解的子結點被舍棄,其余子結點被子加入活結點表中。此后,從活結點表中取下一結點成為當前擴展結點,并重復上述結點擴展過程。這個過程一直持續到找到所求的解或活結點表為空時為止。
?
兩種方法的取舍:
???????? 有一些問題其實無論用回溯法還是分支限界法都可以得到很好的解決,但是另外一些則不然。也許我們需要具體一些的分析——到底何時使用分支限界而何時使用回溯呢?
???????? 回溯法和分支限界法的一些區別: 方法對解空間樹的搜索方式???? ;? 存儲結點的常用數據結構 ; ??? 結點存儲特性常用應用。
????????? 回溯法深度優先搜索堆棧活結點的所有可行子結點被遍歷后才被從棧中彈出找出滿足約束條件的所有解; 分支限界法廣度優先或最小。
?
總結
以上是生活随笔為你收集整理的算法设计之—常用算法之-分支界定法的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 关于突破自我的励志句子189个
 - 下一篇: 如何在 Apple Watch 上使用拆