淺析超啓發式算法(hyper heuristic)

在介紹超啓發式算法前,先來簡單聊一聊啓發式算法。爲解決NP難問題(精確求解非常困難,但驗證結果十分簡單,例如旅行商問題就是一個典型的NP難問題),啓發式算法應運而生。據我所知,啓發式算法中有基於種羣的遺傳算法GA、生物地理學算法BBO;有基於個體的粒子羣算法PSO、蟻羣算法ACO;還有很多名字奇形怪狀,但都跟前面幾種算法萬變不離其宗的諸如花粉算法FPA、蝙蝠算法、貓羣算法、雞羣算法、腎算法,巴拉巴拉算法(這個算法我瞎說的~)。

啓發式算法大致可以分爲三部分,即編碼、運算、解碼。其中編碼部分是將問題轉化爲算法表達式(例如遺傳算法中的基因表示)。運算是啓發式算法的主體部分,是根據算法的規則對編碼後的部分進行操作(例如遺傳算法中的雜交和變異操作),一般在運算部分,啓發式算法需要權衡算法的收斂性和多樣性。解碼是將算法的表達式重新轉換爲問題的解決方案。可以說啓發式算法是在問題層面上的算法,不同的問題模型對啓發式算法的編碼和解碼操作不同。另一方面,啓發式算法的效果受所選參數的影響,例如同樣的編碼、運算、解碼操作,但是不同的雜交率和變異率會使得遺傳算法在解決問題時具有截然不同的效果。如何合理地設置參數一直是研究啓發式算法的一個方向。

現在來聊一聊我理解的超啓發式算法。網上對於超啓發式的資料較少,搜索scdn的超啓發式算法也僅看到了兩篇博文,而且這兩篇博似乎都是百度百科中的部分截取(絕非有冒犯之意,如有不當之處請聯繫我)。因此,萌生了寫一篇關於超啓發式算法的博文,也爲我後續的研究提供基礎。

超啓發式算法是相對於啓發式算法而言的,它的操作對象是底層的啓發式算法或簡單的操作。因此,它是獨立於具體的問題的。就我目前對超啓發式算法的瞭解,它大致可以分爲基於隨機選擇、基於禁忌搜索、基於某個啓發式算法等分類。超啓發式算法可以簡單的理解爲多種啓發式算法或者多種策略和操作的組合優化,有點類似於機器學習中的集成學習。舉個簡單的例子,超啓發式算法通過優先隊列爲它的底層操作排序,每次從隊列中選擇一個底層操作對問題進行求解,最後根據得到的解決方案反饋一個值,超啓發式算法就根據這個值對對應的底層操作進行隊列的更新,直至遇到終止條件。

目前我對超啓發式算法的研究也纔剛開始,還有很多不理解的地方。例如超啓發式算法種羣規模的設定(每次選擇一個底層操作時是把對應種羣都執行該操作還是把某一解決方案執行該操作),超啓發式算法的參數設定,超啓發式算法和普通的改進型啓發式算法相比的優勢,超啓發式算法和簡單的執行完一個啓發式後再執行另一個啓發式的方法有什麼區別等。希望在我後續的研究中,能夠對超啓發式算法有更深入的瞭解。因此,本博文的實際情況是未完待續。。。望各位大佬不吝賜教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章