啟發式算法


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.返回第二步,繼續循環,直到螞蟻數量迭代完成。




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM