最近人工智慧火了,緊跟著啟發式算法又火了,當年在學校的時候,作為數學系的學生,研究的就是啟發式算法,如果人工智慧或許數據挖掘能早些熱起來的話,自己也不至於後來幹了金融…… 閒話少說,講當年自己寫的一篇啟發式算法簡談分享給大家!
解決實際的問題,要建模型,在求解。求解要選擇算法,只有我們對各種算法的優缺點都很熟悉後才能根據實際問題選出有效的算法。但是對各種算法都了如指掌是不現實的,但多知道一些,會使你的選擇集更大,找出最好算法的概率越大。
大自然是神奇的,它造就了很多巧妙的手段和運行機制。受大自然的啟發,人們從大自然的運行規律中找到了許多解決實際問題的方法。對於那些受大自然的運行規律或者面向具體問題的經驗、規則啟發出來的方法,人們常常稱之為啟發式算法(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啟發式算法就不在有存在的意義。
二、啟發式算法的不足和如何解決方法:
啟發式算法目前缺乏統一、完整的理論體系。很難解決! 啟發式算法的提出就是根據經驗提出,沒有什麼堅實的理論基礎。由於NP理論,啟發式算法就解得全局最優性無法保證。等NP?=P有結果了再說吧,不知道這個世紀能不能行。
各種啟發式算法都有個自優點如何,完美結合。如果你沒有實際經驗,你就別去幹這個,相結合就要做大量嘗試,或許會有意外的收穫。啟發式算法中的參數對算法的效果起著至關重要的作用,如何有效設置參數。還是那句話,這是經驗活但還要悟性,只有try again………..
啟發算法缺乏有效的迭代停止條件。還是經驗,迭代次數100不行,就200,還不行就1000…………還不行估計就是算法有問題,或者你把它用錯地方了………..
啟發式算法收斂速度的研究等。你會發現,沒有完美的東西,要快你就要付出代價,就是越快你得到的解也就遠差。
三、各類啟發式算法概述
優勝劣汰是大自然的普遍規律,它主要通過選擇和變異來實現。選擇是優化的基本思想,變異(多樣化)是隨機搜索或非確定搜索的基本思想。「優勝劣汰」是算法搜索的核心,根據「優勝劣汰」策略的不同,可以獲得不同的超啟發式算法。超啟發式算法的主要思想來自於人類經過長期對物理、生物、社會的自然現象仔細的觀察和實踐,以及對這些自然現象的深刻理解,逐步向大自然學習,模仿其中的自然現象的運行機制而得到的。
遺傳算法:是根據生物演化,模擬演化過程中基因染色體的選擇、交叉和變異得到的算法。在進化過程中,較好的個體有較大的生存機率。
模擬退火:是模擬統計物理中固體物質的結晶過程。在退火的過程中,如果搜索到好的解接受;否則,以一定的概率接受不好的解(即實現多樣化或變異的思想),達到跳出局部最優解得目的。
神經網絡:模擬大腦神經處理的過程,通過各個神經元的競爭和協作,實現選擇和變異的過程。
禁忌搜索:模擬人的經驗,通過禁忌表記憶最近搜索過程中的歷史信息,禁忌某些解,以避免走回頭路,達到跳出局部最優解的目的。
螞蟻算法:模擬螞蟻的行為,擬人擬物,向螞蟻的協作方式學習。
這幾種超啟發式算法都有一個共同的特點:從隨機的可行初始解出發,才用迭代改進的策略,去逼近問題的最優解。他們的基本要素:
(1)隨機初始可行解;
(2)給定一個評價函數(常常與目標函數值有關);
(3)鄰域,產生新的可行解;
(4)選擇和接受解得準則;
(5)終止準則。
其中(4)集中反映了超啟發式算法的克服局部最優的能力。
Over,才發現過去的我比現在的我要勤奮……
I will be back!