參考鏈接:
什么是啟發式算法
定義:
-
啟發式算法一般用於解決NP-hard問題,其中NP是指非確定性多項式。
-
啟發式算法是相對於最優化算法提出的,是基於直觀或者經驗構造的算法,在可接受的開銷(時間和空間)內給出待解決組合優化問題的一個可行解。
例子:
- 例如,著名的推銷員旅行問題(Travel Saleman Problem or TSP):假設一個推銷員需要從南京出發,經過廣州,北京,上海,…,等 n 個城市, 最后返回香港。 任意兩個城市之間都有飛機直達,但票價不等。假設公司只給報銷 C 元錢,問是否存在一個行程安排,使得他能遍歷所有城市,而且總的路費小於 C?
- 推銷員旅行問題顯然是 NP 的。因為如果你任意給出一個行程安排,可以很容易算出旅行總開銷。但是,要想知道一條總路費小於 C 的行程是否存在,在最壞情況下,必須檢查所有可能的旅行安排。
PPPPPPS:
現代啟發式算法的各種具體實現方法是相對獨立提出的,相互之間有一定的區別。從歷史上看,現代啟發式算法主要有:模擬退火算法(SA)、遺傳算法(GA)、列表搜索算法(ST)、進化規划(EP)、進化策略(ES)、蟻群算法(ACA)、人工神經網絡(ANN)。如果從決策變量編碼方案的不同來考慮,可以有固定長度的編碼(靜態編碼)和可變長度的編碼(動態編碼)兩種方案。SA是基於Monte Carlo算法迭代求解的一種全局概率型搜索算法,具有區別於常規算法的搜索機制和特點,它是借鑒了熱力學的退火原理建立起來的。GA是借鑒“優勝劣汰”生物進化與遺傳思想而提出的一種全局性並行搜索算法。EP和ES不像GA注重父代與子代遺傳細節而側重父代與子代表現行為上的聯系(強調物種層的行為變化)。TS是一種具有記憶功能的全局逐步優化算法。ACA是受到人們對自然界中真實的蟻群集體行為研究成果的啟發而提出的一種基於種群的模擬進化算法,屬於隨機搜索算法。
目前通用的啟發式算法
-
模擬退火算法(SA)、遺傳算法(GA)、蟻群算法(ACO)、人工神經網絡(ANN)等。
模擬退火算法(SA)
定義:
-
模擬退火算法(Simulated Annealing, SA)的思想借鑒於固體的退火原理,當固體的溫度很高的時候,內能比較大,固體的內部粒子處於快速無序運動,當溫度慢慢降低的過程中,固體的內能減小,粒子的慢慢趨於有序,最終,當固體處於常溫時,內能達到最小,此時,粒子最為穩定。模擬退火算法便是基於這樣的原理設計而成。
模擬退火算法步驟:
- 初始化溫度T(充分大),溫度下限Tmin(充分小),初始解X,每個T值迭代次數L
- 隨機生成臨域解x_new;
- 設f(x)函數來計算用來計算解得好壞,計算出f(x_new)-f(x);
- 如果f(x_new)-f(x)>0,說明新解比原來的解好,則無條件接受,如果f(x_new)-f(x)<0,則說明舊解比新解好,則以概率exp((f(xnew)-f(x))/k*T)接受x_new作為解。
- 如果當前溫度<Tmin時,則退出循環,輸出當前結果,否則減少當前溫度,回到第2步繼續循環,常用的降溫方法為T= a*T (0<a<1),一般a取接近1的值
遺傳算法(GA)
定義:
-
遺傳算法(Genetic Algorithm, GA)起源於對生物系統所進行的計算機模擬研究。它是模仿自然界生物進化機制發展起來的隨機全局搜索和優化方法,借鑒了達爾文的進化論和孟德爾的遺傳學說。其本質是一種高效、並行、全局搜索的方法,能在搜索過程中自動獲取和積累有關搜索空間的知識,並自適應地控制搜索過程以求得最佳解。
遺傳算法步驟
- 對潛在問題進行編碼,初始化基因組,並根據基因組隨機初始化種群,並指定繁衍代數。
- 計算種群中每個個體的適應度,選擇一定數目的留下,其余淘汰。
- 在留下的個體中,隨機繁衍,對分母基因進行交叉(極小概率變異),產生下一代。
- 回到第2步進行循環。直到達到指定的繁衍代數
蟻群算法(ACO)
定義:
- 我們嘗試復原一下螞蟻尋找食物的場景。
- 想象有一只螞蟻找到了食物,這時它需要將食物帶回蟻穴。對於這一只螞蟻而言,它顯然並不知道應該怎么走。那么,這只螞蟻有可能會隨機選擇一條路線。
- 這條路線很可能是一條遠路。但是,螞蟻一路上留下了記號,也就是信息素。如果這只螞蟻繼續不停地搬運食物,或者有許多其他螞蟻一塊搬運的話。他們總會在運氣好的時候走到更快往返的路線上。螞蟻選擇的路越好,相同時間內往返的次數也就更多,也就在路上留下了更多的信息素。
- 於是,螞蟻們總會發現,有一些路徑的信息素更濃,這些路徑就是更好的路線。於是螞蟻也就更多地向信息素更濃的路徑上偏移。螞蟻們不停重復這個過程,最終總能找到一條確定的路線,而這條路線就是螞蟻們找到的最優路徑。
蟻群算法步驟
- 初始化螞蟻數量、可行路段、每條路段距離、每條路段的初始信息素大小等信息
- 設定螞蟻的起點、終點。
- 螞蟻從起點出發根據信息素濃度,有一定的概率性選擇路段,濃度越高,概率越大,逐步回到終點。
- 在螞蟻走過的路徑上,根據每條路段的長度按比例釋放信息素,短的路段釋放的信息素多,長的路段釋放的信息素少。
- 對所有路段的信息素進行揮發。
- 回到第二步進行循環,直到螞蟻數量迭代完。