一個由金屬退火啓發的算法!node
本文主要內容:web
-
金屬退火的原理 -
模擬退火算法機制 -
模擬退火的流程 -
模擬退火的應用 -
算法小結
1.金屬退火的原理
金屬退火是將金屬加熱到必定溫度,保持足夠時間,而後以適宜速度冷卻(一般是緩慢冷卻,有時是控制冷卻)的一種金屬熱處理工藝。模擬退火算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變爲無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每一個溫度都達到平衡態,最後在常溫時達到基態,內能減爲最小。算法
![](http://static.javashuo.com/static/loading.gif)
如上圖,處在低溫狀態時,固體中分子具備的內能很低,在本來的位置上作小範圍的振動。如果將固體加熱到必定溫度,分子內能將會增長,熱運動加重,分子排列的無序度增長。此時再將溫度緩緩下降,在每一個溫度都達到平衡態(即準靜態過程),分子具備的能量逐漸下降,最終迴歸到有序排列的狀態,分子內能也跟着降到最低。微信
2.模擬退火算法機制
模擬退火算法(Simulated Annealing,SA)
最先的思想是由N. Metropolis
等人於1953
年提出。1983
年,S. Kirkpatrick
等成功地將退火思想引入到組合優化領域。它是基於Monte-Carlo
迭代求解策略的一種隨機尋優算法,其出發點是基於物理中固體物質的退火過程與通常組合優化問題之間的類似性。app
介紹模擬退火前,仍是有必要先介紹登山算法。編輯器
登山算法
登山算法是一種簡單的貪心搜索算法,該算法每次從當前解的臨近解空間中選擇一個最優解做爲當前解,直到達到一個局部最優解。svg
![](http://static.javashuo.com/static/loading.gif)
登山算法實現很簡單,其主要缺點是會陷入局部最優解,而不必定能搜索到全局最優解。如上圖所示:假設C
點爲當前解,登山算法搜索到A
點這個局部最優解就會中止搜索,由於在A
點不管向那個方向小幅度移動都不能獲得更優的解。函數
模擬退火核心思想
模擬退火算法從某一較高初溫出發,伴隨溫度參數的不斷降低,結合必定的機率突跳特性在解空間中隨機尋找目標函數的全局最優解,即在局部最優解能機率性地跳出並最終趨於全局最優。以下圖:佈局
![](http://static.javashuo.com/static/loading.gif)
這裏的「必定的機率」的計算參考了金屬冶煉的退火過程,這也是模擬退火算法名稱的由來。將溫度T看成控制參數,目標函數值f
視爲內能E
,而固體在某溫度T
時的一個狀態對應一個解
,而後算法試圖隨着控制參數T的下降,使目標函數f
(內能E
)也逐漸下降,直至趨於全局最小值(退火中低溫時的最低能量狀態),就像金屬退火過程同樣。flex
關於登山算法與模擬退火,有一個有趣的比喻:
-
登山算法:兔子朝着比如今高的地方跳去。它找到了不遠處的最高山峯。可是這座山不必定是珠穆朗瑪峯。這就是登山算法,它不能保證局部最優值就是全局最優值。 -
模擬退火:兔子喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。可是,它漸漸清醒了並朝最高方向跳去。這就是模擬退火。
模擬退火數學原理
從上面咱們知道,會結合機率突跳特性在解空間中隨機尋找目標函數的全局最優解,那麼具體的更新解的機制是什麼呢?若是新解比當前解更優,則接受新解,不然基於Metropolis
準則判斷是否接受新解。接受機率爲:
如上公式,假設當前時刻搜索的解爲 ,對應的系統能量(目標函數)爲 ,對搜索點施加隨機擾動,產生新解 ,相應地,系統能量爲 ,那麼系統對搜索點從 到 轉變的接受機率就爲上公式。具體如下圖爲例:
![](http://static.javashuo.com/static/loading.gif)
假設開始狀態在A
,隨着迭代次數更新到B
局部最優解,這時發現更新到B
時,能量比A
要低,則說明接近最優解了,所以百分百轉移,狀態到達B
後,發現下一步能量上升了,若是是梯度降低則是不容許繼續向前的,而這裏會以必定的機率跳出這個坑,這個機率和當前的狀態、能量等都有關係,若是B
最終跳出來了到達C
,又會繼續以必定的機率跳出來,直到到達D
後,就會穩定下來。
3.模擬退火的流程
算法實質分兩層循環,在任一溫度水平下,隨機擾動產生新解,並計算目標函數值的變化,決定是否被接受。因爲算法初始溫度比較高,這樣,使E
增大的新解在初始時也可能被接受,於是能跳出局部極小值,而後經過緩慢地下降溫度,算法就最終可能收斂到全局最優解,具體流程爲:
-
令 ,表示開始退火的初始溫度,隨機產生一個初始解 ,並計算對應的目標函數值 ; -
令 ,其中 k
取值0
到1
之間,爲溫度降低速率; -
對當前解 施加隨機擾動,在其鄰域內產生一個新解 ,並計算對應的目標函數值 ,計算
-
若 ,接受新解做爲當前解,不然按照機率 判斷是否接受新解; -
在溫度 T
下,重複L
次擾動和接受過程,即執行步驟3
和4
; -
判斷溫度是否達到終止溫度水平,如果則終止算法,不然返回步驟 2
.
具體流程圖以下:
![](http://static.javashuo.com/static/loading.gif)
其中有幾個須要注意的點:
-
初始點的選取對算法結果有必定的影響,最好是屢次運行對結果進行綜合判斷。 -
在算法運行初期,溫度降低快,避免接受過多的差結果。當運行時間增長,溫度降低減緩,以便於更快穩定結果。 -
當迭代次數增長到必定次數時,結果可能已經達到穩定,可是距離算法結束還有一段時間。在設計程序時應該加入適當的輸出條件,知足輸出條件便可結束程序。
4.模擬退火的應用
模擬退火算法做爲一種通用的隨機搜索算法,現已普遍用於VLSI
設計、圖像識別和神經網計算機的研究。模擬退火算法的應用以下:
-
模擬退火算法在 VLSI
設計中的應用
利用模擬退火算法進行VLSI
(Very Large Scale Integration
,超大規模集成電路)的最優設計,是目前模擬退火算法最成功的應用實例之一。用模擬退火算法幾乎能夠很好地完成全部優化的VLSI
設計工做。如全局佈線、布板、佈局和邏輯最小化等等。 -
模擬退火算法在圖像處理中的應用
模擬退火算法可用來進行圖像恢復等工做,即把一幅被污染的圖像從新恢復成清晰的原圖,濾掉其中被畸變的部分。所以它在圖像處理方面的應用前景是廣闊的。 -
模擬退火算法在神經網計算機中的應用
模擬退火算法具備跳出局部最優陷阱的能力。在Boltzmann
機中,即便系統落入了局部最優的陷阱,通過一段時間後,它還能再跳出來,系統最終將往全局最優值的方向收斂。 -
模擬退火算法的其餘應用
除了上述應用外,模擬退火算法還用於其它各類組合優化問題,如TSP
和Knapsack
問題等。大量的模擬實驗代表,模擬退火算法在求解這些問題時能產生使人滿意的近似最優解,並且所用的時間也不很長。
5.小結
總之,模擬退火算法是經過賦予搜索過程一種時變且最終趨於零的機率突跳性,從而可有效避免陷入局部極小並最終趨於全局最優的串行結構的優化算法。算法從某一較高初溫出發,伴隨溫度參數的不斷降低,結合必定的機率突跳特性在解空間中隨機尋找目標函數的全局最優解,即在局部最優解能機率性地跳出並最終趨於全局最優。
至此,本文從金屬退火的原理,登山算法,模擬退火算法思想以及原理,到模擬退火的流程和應用方面對模擬退火算法進行了簡單的闡述,但願對你們有所幫助。
![](http://static.javashuo.com/static/loading.gif)
♥點個贊再走唄♥
本文分享自微信公衆號 - 智能算法(AI_Algorithm)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。