模擬退火算法包含兩個部分即Metropolis算法和退火過程。Metropolis算法就是如何在局部最優解的情況下讓其跳出來,是退火的基礎。1953年Metropolis提出重要性採樣方法,即以概率來接受新狀態,而不是使用完全確定的規則,稱為Metropolis準則,計算量較低。下面先形象的說一下,然後再因此列數學公式:
假設開始狀態在A,隨著迭代次數更新到B的局部最優解,這時發現更新到B時,能力比A要低,則說明接近最優解了,因此百分百轉移,狀態到達B後,發現下一步能量上升了,如果是梯度下降則是不允許繼續向前的,而這裡會以一定的概率跳出這個坑,則各概率和當前的狀態、能量等都有關係,下面會詳細說,如果B最終跳出來了到達C,又會繼續以一定的概率跳出來,可能有人會迷惑會不會跳回之前的B呢?下面會解釋,直到到達D後,就會穩定下來。所以說這個概率的設計是很重要的,下面從數學方面進行解釋。
假設前一個狀態為x(n),系統根據某一指標(梯度下降,上節的能量),狀態變為x(n+1),相應的,系統的能量由E(n)變為E(n+1),定義系統由x(n)變為x(n+1)的接受概率P為:
從上式我們可以看到,如果能量減小了,那麼這種轉移就被接受(概率為1),如果能量增大了,就說明系統偏離全局最優值位置更遠了,此時算法不會立刻將其拋棄,而是進行概率操作:首先在區間【0,1】產生一個均勻分布的隨機數,如果<P,則此種轉移接受,否則拒絕轉移,進入下一步,往復循環。其中P以能量的變化量和T進行決定概率P的大小,所以這個值是動態的。
模擬退火算法新解的產生和接受可分為如下四個步驟:
第一步是由一個產生函數從當前解產生一個位於解空間的新解;為便於後續的計算和接受,減少算法耗時,通常選擇由當前新解經過簡單地變換即可產生新解的方法,如對構成新解的全部或部分元素進行置換、互換等,注意到產生新解的變換方法決定了當前新解的鄰域結構,因而對冷卻進度表的選取有一定的影響。
第二步是計算與新解所對應的目標函數差。因為目標函數差僅由變換部分產生,所以目標函數差的計算最好按增量計算。事實表明,對大多數應用而言,這是計算目標函數差的最快方法。
第三步是判斷新解是否被接受,判斷的依據是一個接受準則,最常用的接受準則是Metropolis準則: 若ΔT<0則接受S′作為新的當前解S,否則以概率exp(-ΔT/T)接受S′作為新的當前解S。
第四步是當新解被確定接受時,用新解代替當前解,這只需將當前解中對應於產生新解時的變換部分予以實現,同時修正目標函數值即可。此時,當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為捨棄時,則在原當前解的基礎上繼續下一輪試驗。模擬退火算法與初始值無關,算法求得的解與初始解狀態S(是算法迭代的起點)無關;模擬退火算法具有漸近收斂性,已在理論上被證明是一種以概率l 收斂於全局最優解的全局優化算法;模擬退火算法具有並行性。
(1)初始的溫度T(0)應選的足夠高,使得所有轉移狀態都被接受。初始溫度越高,獲得高質量的解的概率越大,耗費的時間越長。
(2)退火速率,即溫度下降,最簡單的下降方式是指數式下降:
T(n) = α \alphaαT(n) ,n =1,2,3,…
其中α \alphaα是小於1的正數,一般取值為0.8到0.99之間。使得對每一溫度,有足夠的轉移嘗試,指數式下降的收斂速度比較慢。
(3)終止溫度
如果溫度下降到終止溫度或者達到用戶設定的閾值,則退火完成。