引言:
解決實際的問題,要建模型,再求解。求解要選擇演算法,只有我們對各種演算法的優缺點都很熟悉後才能根據實際問題選出有效的演算法。但是對各種演算法都瞭如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好演算法的概率越大。現在研一,要開題了些點文獻綜述,願與大家分享。
大自然是神奇的,它造就了很多巧妙的手段和執行機制。受大自然的啟發,人們從大自然的執行規律中找到了許多解決實際問題的方法。對於那些受大自然的執行規律或者面向具體問題的經驗、規則啟發出來的方法,人們常常稱之為啟發式演算法(heuristic algorithm
)。現在的啟發式演算法也不是全部來自然的規律,也有來自人類積累的工作經驗。
啟發式演算法的發展:
啟發式演算法的計算量都比較大,所以啟發式演算法伴隨著計算機技術的發展,取得了巨大的成就。
40年代:由於實際需要,提出了啟發式演算法(快速有效)。
50年代:逐步繁榮,其中貪婪演算法和區域性搜尋等到人們的關注。
60年代:
反思,發現以前提出的啟發式演算法速度很快,但是解得質量不能保證,而且對大規
模的問題仍然無能為力(收斂速度慢)。
70年代:計算複雜性理論的提出,np
問題。許多實際問題不可能在合理的時間範圍內找到全域性最優解。發現貪婪演算法和區域性搜尋演算法速度快,但解不好的原因主要是他們只是在區域性的區域內找解,等到的解沒有全域性最優性。
由此必須引入新的搜尋機制和策略………..
holland
的遺傳演算法出現了(genetic algorithm
)再次引發了人們研究啟發式演算法的
興趣。80
年代以後:
模擬退火演算法(simulated annealing algorithm
),人工神經網路(artificial neural network
),禁忌搜尋(tabu search
)相繼出現。
最近比較熱或剛熱過去的:
演化演算法(evolutionary algorithm
), 蟻群演算法(ant algorithms
),擬人擬物演算法,量子演算法等。
各個演算法的思想這就不再詳細給出,為什麼要引出啟發式演算法,因為np
問題,一般的經典演算法是無法求解,或求解時間過長,我們無法接受。這裡要說明的是:啟發式演算法得到的解只是近似最優解(近似到什麼程度,只有根據具體問題才能給出).
二十一世紀的最大的數學難題np
?=p,如果np=p
啟發式演算法就不在有存在的意義。
啟發式演算法的不足和如何解決方法:
(水平有限僅僅提出6
點)啟發式演算法目前缺乏統
一、完整的理論體系。
很難解決!啟發式演算法的提出就是根據經驗提出,沒有什麼堅實的理論基礎。
由於np
理論,啟發式演算法就解得全域性最優性無法保證。
等np?=p
有結果了再說吧,不知道這個世紀能不能行。
各種啟發式演算法都有個自優點如何,完美結合。
如果你沒有實際經驗,你就別去幹這個,相結合就要做大量嘗試,或許會有意外的收穫。
啟發式演算法中的引數對演算法的效果起著至關重要的作用,如何有效設定引數。
還是那句話,這是經驗活但還要悟性,只有try again
………..
啟發演算法缺乏有效的迭代停止條件。
還是經驗,迭代次數100
不行,就200
,還不行就1000
…………
還不行估計就是演算法有問題,或者你把它用錯地方了………..
啟發式演算法收斂速度的研究等。
你會發現,沒有完美的東西,要快你就要付出代價,就是越快你得到的解也就遠差。(
待續)
**自http://blog.csdn.net/aris_zzy/archive/2006/05/27/757156.aspx
啟發式與元啟發式演算法
啟發式演算法 heuristic algorigthm 是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定...
啟發式演算法和元啟發式演算法
是一種基於直觀或經驗構造的演算法,在可接受的花費 指計算時間 計算空間等 給出待解決優化問題的每一例項的乙個可行解,該可行解與與最優解的偏離程度一般不可以事先預計。啟發式演算法是一種技術,這種演算法可以在可接受的計算費用內找到最好的解,但不一定能保證所得到解的可行性及最優性,甚至大多數情況下無法闡述...
啟發式演算法與元啟發式演算法
相對與精確演算法提出的。是一種群體智慧型演算法。平衡區域性最優解與全域性最優解。啟發式演算法可以這樣定義 乙個基於直觀或經驗構造的演算法,在可接受的花費 指計算時間和空間 下給出待解決組合優化問題每乙個例項的乙個可行解,該可行解與最優解的偏離程度一般不能被預計。許多啟發式演算法是相當特殊的,依賴於某...