1. 程式人生 > 實用技巧 >模擬退火演算法詳解

模擬退火演算法詳解

一個由金屬退火啟發的演算法!

本文主要內容:

  • 金屬退火的原理

  • 模擬退火演算法機制

  • 模擬退火的流程

  • 模擬退火的應用

  • 演算法小結

1.金屬退火的原理

金屬退火是將金屬加熱到一定溫度,保持足夠時間,然後以適宜速度冷卻(通常是緩慢冷卻,有時是控制冷卻)的一種金屬熱處理工藝。模擬退火演算法來源於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。

如上圖,處在低溫狀態時,固體中分子具有的內能很低,在原本的位置上做小範圍的振動。若是將固體加熱到一定溫度,分子內能將會增加,熱運動加劇,分子排列的無序度增加。此時再將溫度緩緩降低,在每個溫度都達到平衡態(即準靜態過程),分子具有的能量逐漸降低,最終迴歸到有序排列的狀態,分子內能也跟著降到最低。

2.模擬退火演算法機制

模擬退火演算法(Simulated Annealing,SA)最早的思想是由N. Metropolis等人於1953年提出。1983年,S. Kirkpatrick等成功地將退火思想引入到組合優化領域。它是基於Monte-Carlo 迭代求解策略的一種隨機尋優演算法,其出發點是基於物理中固體物質的退火過程與一般組合優化問題之間的相似性。

介紹模擬退火前,還是有必要先介紹爬山演算法。

爬山演算法

爬山演算法是一種簡單的貪心搜尋演算法,該演算法每次從當前解的臨近解空間中選擇一個最優解作為當前解,直到達到一個區域性最優解。

爬山演算法實現很簡單,其主要缺點是會陷入區域性最優解,而不一定能搜尋到全域性最優解。如上圖所示:假設C

點為當前解,爬山演算法搜尋到A點這個區域性最優解就會停止搜尋,因為在A點無論向那個方向小幅度移動都不能得到更優的解。

模擬退火核心思想

模擬退火演算法從某一較高初溫出發,伴隨溫度引數的不斷下降,結合一定的概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,即在區域性最優解能概率性地跳出並最終趨於全域性最優。如下圖:

這裡的“一定的概率”的計算參考了金屬冶煉的退火過程,這也是模擬退火演算法名稱的由來。將溫度T當作控制引數,目標函式值f視為內能E,而固體在某溫度T時的一個狀態對應一個解 ,然後演算法試圖隨著控制引數T的降低,使目標函式f(內能E)也逐漸降低,直至趨於全域性最小值(退火中低溫時的最低能量狀態),就像金屬退火過程一樣。

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

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

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

模擬退火數學原理

從上面我們知道,會結合概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,那麼具體的更新解的機制是什麼呢?如果新解比當前解更優,則接受新解,否則基於Metropolis準則判斷是否接受新解。接受概率為:

如上公式,假設當前時刻搜尋的解為 ,對應的系統能量(目標函式)為 ,對搜尋點施加隨機擾動,產生新解 ,相應地,系統能量為 ,那麼系統對搜尋點從 轉變的接受概率就為上公式。具體以下圖為例:

假設開始狀態在A,隨著迭代次數更新到B區域性最優解,這時發現更新到B時,能量比A要低,則說明接近最優解了,因此百分百轉移,狀態到達B後,發現下一步能量上升了,如果是梯度下降則是不允許繼續向前的,而這裡會以一定的概率跳出這個坑,這個概率和當前的狀態、能量等都有關係,如果B最終跳出來了到達C,又會繼續以一定的概率跳出來,直到到達D後,就會穩定下來。

3.模擬退火的流程

演算法實質分兩層迴圈,在任一溫度水平下,隨機擾動產生新解,並計算目標函式值的變化,決定是否被接受。由於演算法初始溫度比較高,這樣,使E增大的新解在初始時也可能被接受,因而能跳出區域性極小值,然後通過緩慢地降低溫度,演算法就最終可能收斂到全域性最優解,具體流程為:

  1. ,表示開始退火的初始溫度,隨機產生一個初始解 ,並計算對應的目標函式值 ;

  2. ,其中k取值01之間,為溫度下降速率;

  3. 對當前解 施加隨機擾動,在其鄰域內產生一個新解 ,並計算對應的目標函式值 ,計算

  1. ,接受新解作為當前解,否則按照概率 判斷是否接受新解;

  2. 在溫度T下,重複L次擾動和接受過程,即執行步驟34

  3. 判斷溫度是否達到終止溫度水平,若是則終止演算法,否則返回步驟2.

具體流程圖如下:

其中有幾個需要注意的點:

  • 初始點的選取對演算法結果有一定的影響,最好是多次執行對結果進行綜合判斷。

  • 在演算法執行初期,溫度下降快,避免接受過多的差結果。當執行時間增加,溫度下降減緩,以便於更快穩定結果。

  • 當迭代次數增加到一定次數時,結果可能已經達到穩定,但是距離演算法結束還有一段時間。在設計程式時應該加入適當的輸出條件,滿足輸出條件即可結束程式。

4.模擬退火的應用

模擬退火演算法作為一種通用的隨機搜尋演算法,現已廣泛用於VLSI設計、影象識別和神經網計算機的研究。模擬退火演算法的應用如下:

  • 模擬退火演算法在VLSI設計中的應用
    利用模擬退火演算法進行VLSI(Very Large Scale Integration,超大規模積體電路)的最優設計,是目前模擬退火演算法最成功的應用例項之一。用模擬退火演算法幾乎可以很好地完成所有優化的VLSI設計工作。如全域性佈線、布板、佈局和邏輯最小化等等。

  • 模擬退火演算法在影象處理中的應用
    模擬退火演算法可用來進行影象恢復等工作,即把一幅被汙染的影象重新恢復成清晰的原圖,濾掉其中被畸變的部分。因此它在影象處理方面的應用前景是廣闊的。

  • 模擬退火演算法在神經網計算機中的應用
    模擬退火演算法具有跳出區域性最優陷阱的能力。在Boltzmann機中,即使系統落入了局部最優的陷阱,經過一段時間後,它還能再跳出來,系統最終將往全域性最優值的方向收斂。

  • 模擬退火演算法的其他應用
    除了上述應用外,模擬退火演算法還用於其它各種組合優化問題,如TSPKnapsack問題等。大量的模擬實驗表明,模擬退火演算法在求解這些問題時能產生令人滿意的近似最優解,而且所用的時間也不很長。

5.小結

總之,模擬退火演算法是通過賦予搜尋過程一種時變且最終趨於零的概率突跳性,從而可有效避免陷入區域性極小並最終趨於全域性最優的序列結構的優化演算法。演算法從某一較高初溫出發,伴隨溫度引數的不斷下降,結合一定的概率突跳特性在解空間中隨機尋找目標函式的全域性最優解,即在區域性最優解能概率性地跳出並最終趨於全域性最優。

至此,本文從金屬退火的原理,爬山演算法,模擬退火演算法思想以及原理,到模擬退火的流程和應用方面對模擬退火演算法進行了簡單的闡述,希望對大家有所幫助。

♥點個贊再走唄♥