1.啟發式算法
百度百科:
啟發式算法(heuristic algorithm)是相對於最優化算法提出的。一個問題的最優算法求得該問題每個實例的最優解。啟發式算法可以這樣定義:一個基於直觀或經驗構造的算法,在可接受的花費(指計算時間和空間)下給出待解決組合優化問題每一個實例的一個可行解,該可行解與最優解的偏離程度一般不能被預計。現階段,啟發式算法以仿自然體算法為主,主要有蟻群算法、模擬退火法、神經網絡等。
簡單理解:
啟發式算法就是例如遺傳算法,模擬退火,各種群算法,蟻群,魚群,粒子群,人工神經網絡等模仿自然界或生命體行為模式的算法,一般又稱人工智能算法或全局優化算法。
2.算法介紹
2.1遺傳算法
模擬生物學中遺傳學規律,在每一代中挑選出最優的去“繁殖”后代,以得到最優解。
算法步驟
1.對潛在問題進行編碼,初始化基因組,並根據基因組隨機初始化種群,並指定繁衍代數;
2.計算種群中每個個體的適應度,選擇一定數量的留下,其它淘汰;
3.在留下的個體中,隨機繁衍,對母基因進行交叉(極小概率變異),產生下一代;
4.跳轉到第2步,繼續循環,直到達到繁衍代數為止。
2.2模擬退火算法
模擬物體在加熱后分子達到高度混亂的狀態,然后慢慢冷卻的過程。
算法步驟
1.初始化溫度T
(充分大),溫度下限Tmin
(充分小),初始解X,每個T迭代次數為L;
2.隨機生成臨時解域X_new;
3.設f(x)
函數來計算解的好壞,計算出f(X_new)-f(X)
;
4.如果f(X_new)-f(X)>0
,說明新解比原來的解好,則無條件接受,如果f(X_new)-f(X)<0,則說明舊解比新解好,則以概率exp((f(X_new)-f(x))/k*T)
接受X_new作為解。
5.如果當前溫度小於Tmin
的時候,退出循環,輸出結果;否則,降低當前溫度,T=a*T,(0<a<1)
,跳轉到第二步繼續循環。
模擬退火是啟發示算法的一種,也是一種貪心算法,但是它的搜索過程引入了隨機因素。在迭代更新可行解時,以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。以下圖為例,假定初始解為左邊藍色點A,模擬退火算法會快速搜索到局部最優解B,但在搜索到局部最優解后,不是就此結束,而是會以一定的概率接受到左邊的移動。也許經過幾次這樣的不是局部最優的移動后會到達全局最優點D,於是就跳出了局部最小值。
但在具體的實現中,這個一定概率應該怎么選擇是一個值得深思的問題。太小了跳不出局部最優,太大了可能搜索過頭。
2.3蟻群算法
一群螞蟻,尋找路線,每一條路線都有信息素,運氣好的螞蟻走的最優路線,那么往返次數多,信息素越高,就是最優路徑。
算法步驟
1.初始化螞蟻數量、可行路段、每條路段距離、每條路段的初始信息素大小等信息;
2.設定螞蟻的起點和終點;
3.螞蟻從起點出發根據信息素濃度,有一定概率性地選擇路段,濃度越高,概率越大,逐步到達終點;
4.在螞蟻走過的路徑上,根據每條路段的長度按照比例釋放信息素,短的路段釋放的信息素多,長的路段釋放的信息素少;
5.對所有路段的信息素進行揮發;
6.返回第二步,繼續循環,直到螞蟻數量迭代完成。