随机化算法-----模拟退火
一 概念
模擬退火(Simulated Annealing,簡稱SA)是一種通用概率算法(隨機化算法),用來在一個大的搜尋空間內找尋命題的最優解。
隨機化算法是這樣一種算法,在算法中使用了隨機函數,且隨機函數的返回值直接或者間接的影響了算法的執行流程或執行結果。
隨機算法包括模擬退火。禁忌搜索,遺傳算法等。
適應范圍:大的搜尋空間(例如,參數很多)
二 模擬退火算法-轉載自http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html
優化算法入門系列文章目錄(更新中):
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 )
{
//對于每一個溫度不是只產生一個解進行比較,而是產生很多個解。crazyhacking注
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 ++ ;
}
上面算法的問題是://對于每一個溫度不是只產生一個解進行比較,而是產生很多個解。crazyhacking注
?
四. 使用模擬退火算法解決旅行商問題
旅行商問題 ( 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/??轉載請注明
?
三 ? 算法注意事項--http://wenku.baidu.com/view/266560d2240c844769eaee07.html
模擬退火算法的參數控制問題
?模擬退火算法的應用很廣泛,可以求解NP完全問題,但其參數難以控制,其主要問題有以下三點: ?
?(1) 溫度T的初始值設置問題
?溫度T的初始值設置是影響模擬退火算法全局搜索性能的重要因素之一、初始溫度高,則搜索到全局最優解的可能性大,但因此要花費大量的計算時間;反之,則可節約計算時間,但全局搜索性能可能受到影響。實際應用過程中,初始溫度一般需要依據實驗結果進行若干次調整。
?? (2) 退火速度問題退火速度問題退火速度問題退火速度問題。。。。 ? 模擬退火算法的全局搜索性能也與退火速度密切相關。一般來說,同一溫度下的“充分”搜索(退火)是相當必要的,但這需要計算時間。實際應用中,要針對具體問題的性質和特征設置合理的退火平衡條件。?
? (3) 溫度管理問題溫度管理問題溫度管理問題溫度管理問題。。。。 ? 溫度管理問題也是模擬退火算法難以處理的問題之一。實際應用中,由于必須考慮計算復雜度的切實可行性等問題,常采用如下所示的降溫方式: ? ? ?式中k為正的略小于1.00的常數,t為降溫的次數。
轉載于:https://www.cnblogs.com/catkins/archive/2013/03/25/5270641.html
總結
以上是生活随笔為你收集整理的随机化算法-----模拟退火的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019.03.27【GDOI2019】
- 下一篇: 通过界面生成时不存在的数据刷新界面引起的