[轉(zhuǎn)]爬山算法和模擬退火算法簡介
一. 爬山算法 ( Hill Climbing )
介紹模擬退火前,先介紹爬山算法。爬山算法是一種簡單的貪心搜索算法,該算法每次從當(dāng)前解的臨近解空間中選擇一個(gè)最優(yōu)解作為當(dāng)前解,直到達(dá)到一個(gè)局部最優(yōu)解。
爬山算法實(shí)現(xiàn)很簡單,其主要缺點(diǎn)是會陷入局部最優(yōu)解,而不一定能搜索到全局最優(yōu)解。如圖1所示:假設(shè)C點(diǎn)為當(dāng)前解,爬山算法搜索到A點(diǎn)這個(gè)局部最優(yōu)解就會停止搜索,因?yàn)樵贏點(diǎn)無論向那個(gè)方向小幅度移動都不能得到更優(yōu)的解。
圖1
二. 模擬退火(SA,Simulated Annealing)思想
爬山法是完完全全的貪心法,每次都鼠目寸光的選擇一個(gè)當(dāng)前最優(yōu)解,因此只能搜索到局部的最優(yōu)值。模擬退火其實(shí)也是一種貪心算法,但是它的搜索過程引入了隨機(jī)因素。模擬退火算法以一定的概率來接受一個(gè)比當(dāng)前解要差的解,因此有可能會跳出這個(gè)局部的最優(yōu)解,達(dá)到全局的最優(yōu)解。以圖1為例,模擬退火算法在搜索到局部最優(yōu)解A后,會以一定的概率接受到E的移動。也許經(jīng)過幾次這樣的不是局部最優(yōu)的移動后會到達(dá)D點(diǎn),于是就跳出了局部最大值A(chǔ)。
模擬退火算法描述:
若J( Y(i+1) )>= J( Y(i) ) (即移動后得到更優(yōu)解),則總是接受該移動
若J( Y(i+1) )< J( Y(i) ) (即移動后的解比當(dāng)前解要差),則以一定的概率接受移動,而且這個(gè)概率隨著時(shí)間推移逐漸降低(逐漸降低才能趨向穩(wěn)定)
這里的“一定的概率”的計(jì)算參考了金屬冶煉的退火過程,這也是模擬退火算法名稱的由來。
根據(jù)熱力學(xué)的原理,在溫度為T時(shí),出現(xiàn)能量差為dE的降溫的概率為P(dE),表示為:
P(dE) = exp( dE/(kT) )
其中k是一個(gè)常數(shù),exp表示自然指數(shù),且dE<0。這條公式說白了就是:溫度越高,出現(xiàn)一次能量差為dE的降溫的概率就越大;溫度越低,則出現(xiàn)降溫的概率就越小。又由于dE總是小于0(否則就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函數(shù)取值范圍是(0,1) 。
隨著溫度T的降低,P(dE)會逐漸降低。
我們將一次向較差解的移動看做一次溫度跳變過程,我們以概率P(dE)來接受這樣的移動。
關(guān)于爬山算法與模擬退火,有一個(gè)有趣的比喻:
爬山算法:兔子朝著比現(xiàn)在高的地方跳去。它找到了不遠(yuǎn)處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是爬山算法,它不能保證局部最優(yōu)值就是全局最優(yōu)值。
模擬退火:兔子喝醉了。它隨機(jī)地跳了很長時(shí)間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了并朝最高方向跳去。這就是模擬退火。
下面給出模擬退火的偽代碼表示。
三. 模擬退火算法偽代碼
1: /*
2: * J(y):在狀態(tài)y時(shí)的評價(jià)函數(shù)值
3: * Y(i):表示當(dāng)前狀態(tài)
4: * Y(i+1):表示新的狀態(tài)
5: * r: 用于控制降溫的快慢
6: * T: 系統(tǒng)的溫度,系統(tǒng)初始應(yīng)該要處于一個(gè)高溫的狀態(tài)
7: * T_min :溫度的下限,若溫度T達(dá)到T_min,則停止搜索
8: */
9: while( T > T_min )
10: {
11: dE = J( Y(i+1) ) - J( Y(i) ) ;
12:
13: if ( dE >= 0 ) //表達(dá)移動后得到更優(yōu)解,則總是接受移動
14: Y(i+1) = Y(i) ; //接受從Y(i)到Y(jié)(i+1)的移動
15: else
16: {
17: // 函數(shù)exp( dE/T )的取值范圍是(0,1) ,dE/T越大,則exp( dE/T )也
18: if ( exp( dE/T ) > random( 0 , 1 ) )
19: Y(i+1) = Y(i) ; //接受從Y(i)到Y(jié)(i+1)的移動
20: }
21: T = r * T ; //降溫退火 ,0<r<1 。r越大,降溫越慢;r越小,降溫越快
22: /*
23: * 若r過大,則搜索到全局最優(yōu)解的可能會較高,但搜索的過程也就較長。若r過小,則搜索的過程會很快,但最終可能會達(dá)到一個(gè)局部最優(yōu)值
24: */
25: i ++ ;
26: }
四. 使用模擬退火算法解決旅行商問題
旅行商問題 ( TSP , Traveling Salesman Problem ) :有N個(gè)城市,要求從其中某個(gè)問題出發(fā),唯一遍歷所有城市,再回到出發(fā)的城市,求最短的路線。
旅行商問題屬于所謂的NP完全問題,精確的解決TSP只能通過窮舉所有的路徑組合,其時(shí)間復(fù)雜度是O(N!) 。
使用模擬退火算法可以比較快的求出TSP的一條近似最優(yōu)路徑。(使用遺傳算法也是可以的,我將在下一篇文章中介紹)模擬退火解決TSP的思路:
1. 產(chǎn)生一條新的遍歷路徑P(i+1),計(jì)算路徑P(i+1)的長度L( P(i+1) )
2. 若L(P(i+1)) < L(P(i)),則接受P(i+1)為新的路徑,否則以模擬退火的那個(gè)概率接受P(i+1) ,然后降溫
3. 重復(fù)步驟1,2直到滿足退出條件
產(chǎn)生新的遍歷路徑的方法有很多,下面列舉其中3種:
1. 隨機(jī)選擇2個(gè)節(jié)點(diǎn),交換路徑中的這2個(gè)節(jié)點(diǎn)的順序。
2. 隨機(jī)選擇2個(gè)節(jié)點(diǎn),將路徑中這2個(gè)節(jié)點(diǎn)間的節(jié)點(diǎn)順序逆轉(zhuǎn)。
3. 隨機(jī)選擇3個(gè)節(jié)點(diǎn)m,n,k,然后將節(jié)點(diǎn)m與n間的節(jié)點(diǎn)移位到節(jié)點(diǎn)k后面。
五. 算法評價(jià)
模擬退火算法是一種隨機(jī)算法,并不一定能找到全局的最優(yōu)解,可以比較快的找到問題的近似最優(yōu)解。 如果參數(shù)設(shè)置得當(dāng),模擬退火算法搜索效率比窮舉法要高。
原文地址:
http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html
相關(guān)知識
爬山模擬器下載
爬山模擬器免廣告游戲下載安裝
爬山模擬器3d下載
模擬山羊羽山羊怎么解鎖 模擬山羊羽山羊解鎖方法
模擬山羊3如何獲得身體?(模擬山羊3如何獲得身體數(shù)據(jù))
健身房模擬器爬山丘安卓版下載
駕駛模擬器動感汽車模擬器THK
環(huán)境模擬計(jì)算的MATLAB程序設(shè)計(jì).ppt
工程數(shù)值模擬基礎(chǔ)算法與模型全國重點(diǎn)實(shí)驗(yàn)室科級干部招聘啟事
模擬山羊太空羊怎么獲得 模擬山羊太空羊獲取方法
網(wǎng)址: [轉(zhuǎn)]爬山算法和模擬退火算法簡介 http://m.u1s5d6.cn/newsview1602916.html
推薦資訊
- 1發(fā)朋友圈對老公徹底失望的心情 12775
- 2BMI體重指數(shù)計(jì)算公式是什么 11235
- 3補(bǔ)腎吃什么 補(bǔ)腎最佳食物推薦 11199
- 4性生活姿勢有哪些 盤點(diǎn)夫妻性 10425
- 5BMI正常值范圍一般是多少? 10137
- 6在線基礎(chǔ)代謝率(BMR)計(jì)算 9652
- 7一邊做飯一邊躁狂怎么辦 9138
- 8從出汗看健康 出汗透露你的健 9063
- 9早上怎么喝水最健康? 8613
- 10五大原因危害女性健康 如何保 7826