大白話解析類比退火演算法__演算法

來源:互聯網
上載者:User

最佳化演算法入門系列文章目錄(更新中):

  1. 類比退火演算法

  2. 遺傳演算法


一. 爬山演算法 ( Hill Climbing )

         介紹類比退火前,先介紹爬山演算法。爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前解的臨近解空間中選擇一個最優解作為當前解,直到達到一個局部最優解。

         爬山演算法實現很簡單,其主要缺點是會陷入局部最優解,而不一定能搜尋到全域最優解。如圖1所示:假設C點為當前解,爬山演算法搜尋到A點這個局部最優解就會停止搜尋,因為在A點無論向那個方向小幅度移動都不能得到更優的解。

圖1

 


二. 類比退火(SA,Simulated Annealing)思想

         爬山法是完完全全的貪進法,每次都鼠目寸光的選擇一個當前最優解,因此只能搜尋到局部的最優值。類比退火其實也是一種貪心演算法,但是它的搜尋過程引入了隨機因素。類比退火演算法以一定的機率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全域的最優解。以圖1為例,類比退火演算法在搜尋到局部最優解A後,會以一定的機率接受到E的移動。也許經過幾次這樣的不是局部最優的移動後會到達D點,於是就跳出了局部最大值A。

         類比退火演算法描述:

         若J( Y(i+1) )>= J( Y(i) )  (即移動後得到更優解),則總是接受該移動

         若J( Y(i+1) )< J( Y(i) )  (即移動後的解比當前解要差),則以一定的機率接受移動,而且這個機率隨著時間推移逐漸降低(逐漸降低才能趨向穩定)

  這裡的“一定的機率”的計算參考了金屬冶煉的退火過程,這也是類比退火演算法名稱的由來。

  根據熱力學的原理,在溫度為T時,出現能量差為dE的降溫的機率為P(dE),表示為:

    P(dE) = exp( dE/(kT) )

  其中k是一個常數,exp表示自然指數,且dE<0。這條公式說白了就是:溫度越高,出現一次能量差為dE的降溫的機率就越大;溫度越低,則出現降溫的機率就越小。又由於dE總是小於0(否則就不叫退火了),因此dE/kT < 0 ,所以P(dE)的函數取值範圍是(0,1) 。

  隨著溫度T的降低,P(dE)會逐漸降低。

  我們將一次向較差解的移動看做一次溫度跳變過程,我們以機率P(dE)來接受這樣的移動。

  關於爬山演算法與類比退火,有一個有趣的比喻:

  爬山演算法:兔子朝著比現在高的地方跳去。它找到了不遠處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是爬山演算法,它不能保證局部最優值就是全域最優值。

  類比退火:兔子喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了並朝最高方向跳去。這就是類比退火。


下面給出類比退火的虛擬碼表示。


三. 類比退火演算法虛擬碼 代碼

 /* * J(y):在狀態y時的評價函數值 * Y(i):表示目前狀態 * Y(i+1):表示新的狀態 * r: 用於控制降溫的快慢 * T: 系統的溫度,系統初始應該要處於一個高溫的狀態 * T_min :溫度的下限,若溫度T達到T_min,則停止搜尋 */ while( T > T_min ) {   dE = J( Y(i+1) ) - J( Y(i) ) ;   if ( dE >= 0 ) //表達移動後得到更優解,則總是接受移動 Y(i+1) = Y(i) ; //接受從Y(i)到Y(i+1)的移動   else   { // 函數exp( dE/T )的取值範圍是(0,1) ,dE/T越大,則exp( dE/T )也 if ( exp( dE/T ) > random( 0 , 1 ) ) Y(i+1) = Y(i) ; //接受從Y(i)到Y(i+1)的移動   }   T = r * T ; //降溫退火 ,0<r<1 。r越大,降溫越慢;r越小,降溫越快   /*   * 若r過大,則搜尋到全域最優解的可能會較高,但搜尋的過程也就較長。若r過小,則搜尋的過程會很快,但最終可能會達到一個局部最優值   */   i ++ ; } 

四. 使用類比退火演算法解決旅行商問題

  旅行商問題 ( TSP , Traveling Salesman Problem ) :有N個城市,要求從其中某個問題出發,唯一遍曆所有城市,再回到出發的城市,求最短的路線。

  旅行商問題屬於所謂的NP完全問題,精確的解決TSP只能通過窮舉所有的路徑組合,其時間複雜度是O(N!) 。

  使用類比退火演算法可以比較快的求出TSP的一條近似最優路徑。(使用遺傳演算法也是可以的,我將在下一篇文章中介紹)類比退火解決TSP的思路:

1. 產生一條新的遍曆路徑P(i+1),計算路徑P(i+1)的長度L( P(i+1) )

2. 若L(P(i+1)) < L(P(i)),則接受P(i+1)為新的路徑,否則以類比退火的那個機率接受P(i+1) ,然後降溫

3. 重複步驟1,2直到滿足允出準則

  產生新的遍曆路徑的方法有很多,下面列舉其中3種:

1. 隨機播放2個節點,交換路徑中的這2個節點的順序。

2. 隨機播放2個節點,將路徑中這2個節點間的節點順序逆轉。

3. 隨機播放3個節點m,n,k,然後將節點m與n間的節點移位到節點k後面。


五. 演算法評價

        類比退火演算法是一種隨機演算法,並不一定能找到全域的最優解,可以比較快的找到問題的近似最優解。 如果參數設定得當,類比退火演算法搜尋效率比窮舉法要高。

 from here : http://www.cnblogs.com/heaad/   轉載請註明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.