什么是啟發(fā)式算法啟發(fā)式算法的運算效能
啟發(fā)式算法是相對于最優(yōu)化算法提出的。一個問題的最優(yōu)算法求得該問題每個實例的最優(yōu)解。那么你對啟發(fā)式算法了解多少呢?以下是由學習啦小編整理關(guān)于什么是啟發(fā)式算法的內(nèi)容,希望大家喜歡!
啟發(fā)式算法的概括內(nèi)容
計算機科學的兩大基礎目標,就是發(fā)現(xiàn)可證明其執(zhí)行效率良好且可得最佳解或次佳解的算法。而啟發(fā)式算法則試圖一次提供一或全部目標。 例如它常能發(fā)現(xiàn)很不錯的解,但也沒辦法證明它不會得到較壞的解;它通??稍诤侠頃r間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。
有時候人們會發(fā)現(xiàn)在某些特殊情況下,啟發(fā)式算法會得到很壞的答案或效率極差,然而造成那些特殊情況的數(shù)據(jù)組合,也許永遠不會在現(xiàn)實世界出現(xiàn)。因此現(xiàn)實世界中啟發(fā)式算法常用來解決問題。啟發(fā)式算法處理許多實際問題時通常可以在合理時間內(nèi)得到不錯的答案。
有一類的通用啟發(fā)式策略稱為元啟發(fā)式算法(metaheuristic),通常使用亂數(shù)搜尋技巧。他們可以應用在非常廣泛的問題上,但不能保證效率。
近年來隨著智能計算領(lǐng)域的發(fā)展,出現(xiàn)了一類被稱為超啟發(fā)式算法(Hyper-Heuristic Algorithm)的新算法類型。最近幾年,智能計算領(lǐng)域的著名國際會議(GECCO 2009, CEC 2010,PPSN 2010)分別舉辦了專門針對超啟發(fā)式算法的workshop或session。從GECCO 2011開始,超啟發(fā)式算法的相關(guān)研究正式成為該會議的一個領(lǐng)域(self* search-new frontier track)。國際智能計算領(lǐng)域的兩大著名期刊Journal of Heuristics和Evolutionary Computation也在2010年和2012年分別安排了??亟榻B與超啟發(fā)式算法有關(guān)的研究進展。
啟發(fā)式算法的最短路徑
所謂的最短路徑問題有很多種意思, 在這里啟發(fā)式指的是一個在一個搜尋樹的節(jié)點上定義的函數(shù)h(n),用于評估從此節(jié)點到目標節(jié)點最便宜的路徑。啟發(fā)式通常用于資訊充分的搜尋算法,例如最好優(yōu)先貪婪算法與A*。最好優(yōu)先貪婪算法會為啟發(fā)式函數(shù)選擇最低代價的節(jié)點;A*則會為g(n) + h(n)選擇最低代價的節(jié)點,此g(n)是從起始節(jié)點到目前節(jié)點的路徑的確實代價。如果h(n)是可接受的(admissible)意即h(n)未曾付出超過達到目標的代價,則A*一定會找出最佳解。
最能感受到啟發(fā)式算法好處的經(jīng)典問題是n-puzzle。此問題在計算錯誤的拼圖圖形,與計算任兩塊拼圖的曼哈頓距離的總和以及它距離目的有多遠時,使用了本算法。注意,上述兩條件都必須在可接受的范圍內(nèi)。
啟發(fā)式算法的運算效能
任何的搜尋問題中,每個節(jié)點都有b個選擇以及到達目標的深度d,一個毫無技巧的算法通常都要搜尋bd個節(jié)點才能找到答案。啟發(fā)式算法借由使用某種切割機制降低了分叉率(branching factor)以改進搜尋效率,由b降到較低的b'。分叉率可以用來定義啟發(fā)式算法的偏序關(guān)系,例如:若在一個n節(jié)點的搜尋樹上,h1(n)的分叉率較h2(n)低,則 h1(n) < h2(n)。啟發(fā)式為每個要解決特定問題的搜尋樹的每個節(jié)點提供了較低的分叉率,因此它們擁有較佳效率的計算能力。
新啟發(fā)式算法
如何找到一個分叉率較少又通用的合理啟發(fā)式算法,已被人工智能社群深入探究過。 他們使用幾種常見技術(shù):
部分問題的解答的代價通??梢栽u估解決整個問題的代價,通常很合理。例如一個10-puzzle拼盤,解題的代價應該與將1到5的方塊移回正確位置的代價差不多。通常解題者會先建立一個儲存部份問題所需代價的模式數(shù)據(jù)庫(pattern database)以評估問題。 解決較易的近似問題通??梢阅脕砗侠碓u估原先問題。例如曼哈頓距離是一個簡單版本的n-puzzle問題,因為我們假設可以獨立移動一個方塊到我們想要的位置,而暫不考慮會移到其他方塊的問題。 給我們一群合理的啟發(fā)式函式h1(n),h2(n),...,hi(n),而函式h(n) = max{h1(n),h2(n),...,hi(n)}則是個可預測這些函式的啟發(fā)式函式。 一個在1993年由A.E. Prieditis寫出的程式ABSOLVER就運用了這些技術(shù),這程式可以自動為問題產(chǎn)生啟發(fā)式算法。ABSOLVER為8-puzzle產(chǎn)生的啟發(fā)式算法優(yōu)于任何先前存在的!而且它也發(fā)現(xiàn)了第一個有用的解魔術(shù)方塊的啟發(fā)式程式。
看過“啟發(fā)式算法的運算效能”的人還看了: