優化算法系列之模擬退火算法(1)——基本原理枯燥版本
推薦書籍-->《智能優化算法及其MATLAB實例(第二版)》
知乎上的形象描述:
一個鍋底凹凸不平有很多坑的大鍋,晃動這個鍋使得一個小球使其達到全局最低點。一開始晃得比較厲害,小球的變化也就比較大,在趨於全局最低的時候慢慢減小晃鍋的幅度,直到最后不晃鍋,小球達到全局最低。
1.歷史(不感興趣可以跳過)
著名的模擬退火算法,它是一種基於蒙特卡洛思想設計的近似求解最優化問題的方法。
美國物理學家 N.Metropolis 和同仁在1953年發表研究復雜系統、計算其中能量分布的文章,他們使用蒙特卡羅模擬法計算多分子系統中分子的能量分布。這相當於是本文所探討之問題的開始,事實上,模擬退火中常常被提到的一個名詞就是Metropolis准則,后面我們還會介紹。
美國IBM公司物理學家 S.Kirkpatrick、C. D. Gelatt 和 M. P. Vecchi 於1983年在《Science》上發表了一篇頗具影響力的文章:《以模擬退火法進行最優化(Optimization by Simulated Annealing)》。他們借用了Metropolis等人的方法探討一種旋轉玻璃態系統(spin glass system)時,發覺其物理系統的能量和一些組合最優(combinatorial optimization)問題(著名的旅行推銷員問題TSP即是一個代表例子)的成本函數相當類似:尋求最低成本即似尋求最低能量。由此,他們發展出以 Metropolis 方法為本的一套算法,並用其來解決組合問題等的尋求最優解。
幾乎同時,歐洲物理學家 V.Carny 也發表了幾乎相同的成果,但兩者是各自獨立發現的;只是Carny“運氣不佳”,當時沒什么人注意到他的大作;或許可以說,《Science》雜志行銷全球,“曝光度”很高,素負盛名,而Carny卻在另外一本發行量很小的專門學術期刊《J.Opt.Theory Appl.》發表其成果因而並未引起應有的關注。
Kirkpatrick等人受到Metropolis等人用蒙特卡羅模擬的啟發而發明了“模擬退火”這個名詞,因為它和物體退火過程相類似。尋找問題的最優解(最值)即類似尋找系統的最低能量。因此系統降溫時,能量也逐漸下降,而同樣意義地,問題的解也“下降”到最值。
固體退火:
1.先將固體加熱至溶化然后徐徐冷卻。
2.退火要徐徐進行使得系統在每一溫度下都達到平衡。
3.冷卻時不能急劇減溫。
模擬退火算法:
1、從某個初始解i0出發,經過L次解的變換(每次根據Metropoils算法求解),求得在給定溫度下的相對最優解。
2、減小控制參數T,重新變換解(如上)
3、求得在控制參數T趨於0時的最優解
2.什么是退火——物理上的由來
在熱力學上,退火(annealing)現象指物體逐漸降溫的物理現象,溫度愈低,物體的能量狀態會低;夠低后,液體開始冷凝與結晶,在結晶狀態時,系統的能量狀態最低。大自然在緩慢降溫(亦即,退火)時,可“找到”最低能量狀態:結晶。但是,如果過程過急過快,快速降溫(亦稱「淬煉」,quenching)時,會導致不是最低能態的非晶形。
如下圖所示,首先(左圖)物體處於非晶體狀態。我們將固體加溫至充分高(中圖),再讓其徐徐冷卻,也就退火(右圖)。加溫時,固體內部粒子隨溫升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最后在常溫時達到基態,內能減為最小(此時物體以晶體形態呈現)。
似乎,大自然知道慢工出細活:緩緩降溫,使得物體分子在每一溫度時,能夠有足夠時間找到安頓位置,則逐漸地,到最后可得到最低能態,系統最安穩。
3.Metropolis(蒙特卡洛)准則
1953年Metropolis提出了這樣一個重要性采樣的方法,即設從當前狀態i生成新狀態j,若新狀態的內能小於狀態i的內能即(Ej<Ei),則接受新狀態j作為新的當前狀態;否則,以概率 exp[-(Ej-Ei)/kT] 接受狀態j,其中k為Boltzmann常數,這就是通常所說的Metropolis准則。
根據Metropolis(蒙特卡洛)准則,粒子在溫度T時趨於平衡的概率為exp(-ΔE/(kT)),其中E為溫度T時的內能,ΔE為其改變數,k為Boltzmann常數。Metropolis准則常表示為
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
根據熱力學的原理,在溫度為T時,出現能量差為dE的降溫的概率為p(dE),表示為:

其中: k是波爾茲曼常數,值為k=1.3806488(13)×10−23,
exp表示自然指數,
dE<0
dE/kT<0
p(dE)函數的取值范圍是(0,1)。
滿足概率密度函數的定義。
其實這條公式更直觀意思就是:溫度越高,出現一次能量差為p(dE)的降溫的概率就越大;溫度越低,則出現降溫的概率就越小。
在實際問題中,這里的“一定的概率”的計算參考了金屬冶煉的退火過程。假定當前可行解為x,迭代更新后的解為x_new,那么對應的“能量差”定義為:
Δf=f(x_new)−f(x).
其對應的“一定概率”為:
注:在實際問題中,可以設定k=1。因為kT可以等價於一個參數 T。如設定k=2、T=1000,等於直接設定T=2000的效果。
4.引入模擬退火(Simulate Anneal)
想象一下如果我們現在有下面這樣一個函數,現在想求函數的(全局)最優解。如果采用Greedy策略,那么從A點開始試探,如果函數值繼續減少,那么試探過程就會繼續。而當到達點B時,顯然我們的探求過程就結束了(因為無論朝哪個方向努力,結果只會越來越大)。最終我們只能找打一個局部最后解B。
模擬退火其實也是一種Greedy貪心算法,但是它的搜索過程引入了隨機因素。在迭代更新可行解時,以一定的概率來接受一個比當前解要差的解,因此有可能會跳出這個局部的最優解,達到全局的最優解。以下圖為例,假定初始解為左邊藍色點A,模擬退火算法會快速搜索到局部最優解B,但在搜索到局部最優解后,不是就此結束,而是會以一定的概率接受到左邊的移動。也許經過幾次這樣的不是局部最優的移動后會到達全局最優點D,於是就跳出了局部最小值。
有趣的比喻
爬山算法:兔子朝着比現在高的地方跳去。它找到了不遠處的最高山峰。但是這座山不一定是珠穆朗瑪峰。這就是爬山算法,它不能保證局部最優值就是全局最優值。
(非常懶,一開始看到比現在高的就接受)
模擬退火:兔子喝醉了。它隨機地跳了很長時間。這期間,它可能走向高處,也可能踏入平地。但是,它漸漸清醒了並朝最高方向跳去。這就是模擬退火。
(一開始很激動,到處試探,變化大。后面心累了,逐漸減緩了步伐,朝向此時此刻的最高點爬去)
5.模擬退火原理
模擬退火算法(Simulate Anneal Arithmetic,SAA)是一種通用概率演算法,用來在一個大的搜尋空間內找尋命題的最優解。
模擬退火的原理也和金屬退火的原理近似:將熱力學的理論套用到統計學上,將搜尋空間內每一點想像成空氣內的分子;分子的能量,就是它本身的動能;而搜尋空間內的每一點,也像空氣分子一樣帶有“能量”,以表示該點對命題的合適程度。演算法先以搜尋空間內一個任意點作起始:每一步先選擇一個“鄰居”,然后再計算從現有位置到達“鄰居”的概率。
6.模擬退火算法模型
模擬退火算法可以分解為解空間、目標函數和初始解三部分。
-
- 模擬退火的基本思想:
- (1) 初始化:初始溫度T(充分大),初始解狀態S(是算法迭代的起點), 每個T值的迭代次數L
- (2) 對k=1,……,L做第(3)至第6步:
- (3) 產生新解S′
- (4) 計算增量Δt′=C(S′)-C(S),其中C(S)為評價函數||優化目標
- (5) 若Δt′<0則接受S′作為新的當前解,否則以概率exp(-Δt′/T)接受S′作為新的當前解.
- (6) 如果滿足終止條件則輸出當前解作為最優解,結束程序。終止條件通常取為連續若干個新解都沒有被接受時終止算法。
- (7) T逐漸減少,且T->0,然后轉第2步。
- 模擬退火的基本思想:
算法對應動態演示圖:
-
- 模擬退火算法新解的產生和接受可分為如下四個步驟:
- 第一步是由一個產生函數從當前解產生一個位於解空間的新解;為便於后續的計算和接受,減少算法耗時,通常選擇由當前新解經過簡單地變換即可產生新解的方法,如對構成新解的全部或部分元素進行置換、互換等,注意到產生新解的變換方法決定了當前新解的鄰域結構,因而對冷卻進度表的選取有一定的影響。
- 第二步是計算與新解所對應的目標函數差。因為目標函數差僅由變換部分產生,所以目標函數差的計算最好按增量計算。事實表明,對大多數應用而言,這是計算目標函數差的最快方法。
- 第三步是判斷新解是否被接受,判斷的依據是一個接受准則,最常用的接受准則是Metropolis准則: 若Δt′<0則接受S′作為新的當前解S,否則以概率exp(-Δt′/T)接受S′作為新的當前解S。
- 第四步是當新解被確定接受時,用新解代替當前解,這只需將當前解中對應於產生新解時的變換部分予以實現,同時修正目標函數值即可。此時,當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為舍棄時,則在原當前解的基礎上繼續下一輪試驗。
- 模擬退火算法新解的產生和接受可分為如下四個步驟:
模擬退火算法與初始值無關,算法求得的解與初始解狀態S(是算法迭代的起點)無關;模擬退火算法具有漸近收斂性,已在理論上被證明是一種以概率l 收斂於全局最優解的全局優化算法;模擬退火算法具有並行性。
7.模擬退火基本要素
2)狀態產生函數(鄰域函數)應盡可能保證產生的候選解遍布全部解空間。通常由兩部分組成,即產生候選解的方式和候選解產生的概率分布。
3)候選解一般采用按照某一概率密度函數對解空間進行隨機采樣來獲得。
4)概率分布可以是均勻分布、正態分布、指數分布等。
2)通俗的理解是接受一個新解為當前解的概率。
3)它與當前的溫度參數T有關,隨溫度下降而減小。
4)一般采用Metropolis准則。
2)連續若干步的目標值變化較小。
3)按一定的步數抽樣。
2)設置外循環迭代次數。
3)算法搜索到的最優值連續若干步保持不變。
4)檢驗系統熵是否穩定。
8.參數說明
退火過程由一組初始參數,即冷卻進度表控制,它的核心是盡量使系統達到轉平衡,以使算法在有限的時間內逼近最優解。冷卻進度表包括:
(1)控制參數的初值T0:冷卻開始的溫度。
(2)控制參數T的衰減函數:因計算機能夠處理的都是離散數據,因此把連續的降溫過程離散化成降溫過程中的一系列溫度點,衰減函數即計算這一系列溫度的表達式。
(3)控制參數T的終值Tf (停止准則)。
(4)Markov鏈的長度Lk:任一溫度T 的迭代次數。
9.參數設置
模擬退火算法的應用很廣泛,可以求解NP完全問題,但其參數難以控制,其主要問題有以下三點:
(1)控制參數T的初值T0
求解全局優化問題的隨機搜索算法一般都采用大范圍的粗略搜索與局部的精細搜索相結合的搜索策略。
只有在初始的大范圍搜索階段找到全局最優解所在的區域,才能逐步縮小搜索的范圍,最終求出全局最優解。
模擬退火算法是通過控制參數T的初值T0和氣衰減變化過程來實現大范圍的粗略搜索與局部的精細搜索。
在問題規模較大時,過小的T0往往導致算法難以跳出局部陷阱而達不到全局最優。一般為100℃。
【初始溫度高,則搜索到全局最優解的可能性大,但因此要花費大量的計算時間;反之,則可節約計算時間,但全局搜索性能可能受到影響。實際應用過程中,初始溫度一般需要依據實驗結果進行若干次調整。】
(2)控制參數 T 的衰減函數
衰減函數可以有多種形式,一個常用的衰減函數是
其中,k為降溫的次數,α 是一個常數,可以取為0.5~0.99,它的取值決定了降溫過程的快慢。
【為了保證較大的搜索空間,a一般取接近於1的值,如0.95、0.9】
(3)退火速度:Markov鏈長度
Markov鏈長度的選取原則是:在控制參數T的衰減函數已經選定的前提下,Lk應能使在控制參數T的每一取值上達到准平衡。
從經驗上說,對簡單的情況可以令Lk=100n,n為問題規模。
【循環次數增加必定帶來計算開銷的增大,實際應用中,要針對具體問題的性質和特征設置合理的退火平衡條件。】
(4)控制參數T的終值Tf (停止准則)。或者若干個相繼的Mapkob鏈解沒有產生變化,就是連續好多個解都沒變化。
算法停止准則:對Metropolis准則中的接受函數
分析可知,在T比較大的高溫情況,指數上的分母比較大,而這是一個負指數,所以整個接受函數可能會趨於1,即比當前解 xi 更差的新解 xj 也可能被接受因此就有可能跳出局部極小而進行廣域搜索,去搜索解空間的其他區域;而隨着冷卻的進行,T減小到一個比較小的值時,接收函數分母小了整體也小了,即難於接受比當前解更差的解,也就不太容易跳出當前的區域。如果在高溫時,已經進行了充分的廣域搜索,找到了可能存在的最好解的區域,而在低溫再進行足夠的局部搜索,則可能最終找到全局最優了。因此,一般終止溫度 Tj 應設為足夠小的正數,比如0.01~5。
【一般終止溫度 Tj 應設為足夠小的正數,比如0.01~5。】
10.優缺點及改進
模擬退火算法(simulated annealing,SA)是一種通用概率算法,用來在一個大的搜尋空間內尋找問題的最優解。
優點:能夠有效解決NP難問題、避免陷入局部最優解。
計算過程簡單,通用,魯棒性強,適用於並行處理,可用於求解復雜的非線性優化問題。
模擬退火算法與初始值無關,算法求得的解與初始解狀態S(是算法迭代的起點)無關;
模擬退火算法具有漸近收斂性,已在理論上被證明是一種以概率收斂於全局最優解的全局優化算法;
模擬退火算法具有並行性
缺點:收斂速度慢,執行時間長,算法性能與初始值有關及參數敏感等缺點。
由於要求較高的初始溫度、較慢的降溫速率、較低的終止溫度,以及各溫度下足夠多次的抽樣,因此優化過程較長。
(1)如果降溫過程足夠緩慢,多得到的解的性能會比較好,但與此相對的是收斂速度太慢;
(2)如果降溫過程過快,很可能得不到全局最優解。
適用環境:組合優化問題。
改進:
(1)設計合適的狀態產生函數,使其根據搜索進程的需要表現出狀態的全空間分散性或局部區域性。
(2)設計高效的退火策略。
(3)避免狀態的迂回搜索。
(4)采用並行搜索結構。
(5)為避免陷入局部極小,改進對溫度的控制方式。
(6)選擇合適的初始狀態。
(7)設計合適的算法終止准則。
-------------------------------------------------------------------------------------------------------------------------------
(8)增加升溫或重升溫過程。在算法進程的適當時機,將溫度適當提高,從而可激活各狀態的接受概率,以調整搜索進程中的當前狀態,避免算法在局部極小解處停滯不前。
(9)增加記憶功能。為避免搜索過程中由於執行概率接受環節而遺失當前遇到的最優解,可通過增加存儲環節,將一些在這之前好的態記憶下來。
(10)增加補充搜索過程。即在退火過程結束后,以搜索到的最優解為初始狀態,再次執行模擬退火過程或局部性搜索。
(11)對每一當前狀態,采用多次搜索策略,以概率接受區域內的最優狀態,而非標准SA的單次比較方式。
(12)結合其他搜索機制的算法,如遺傳算法、混沌搜索等。
(13)上述各方法的綜合應用。
11.總結
以爬山算法為代表的局部搜索算法僅僅適用於某類組合優化問題並且解的質量也不是很理想。於是為了克服這些缺點,人們通過一些自然物理過程尋找解決辦法模擬退火算法源於對固體的退火過程的模擬,通過采用Metropolis接受准則,並用一組稱為冷卻表的參數控制算法進程,使得我們可以在多項式時間內求出一個近似最優解。
模擬退火算法(simulated annealing,SA)是一種通用概率算法,用來在一個大的搜尋空間內尋找問題的最優解。由於它能夠有效解決NP難問題、避免陷入局部最優解等優點,已經在生產調度、控制工程、機器學習、神經網絡、圖像處理等領域獲得了廣泛應用。
12.摘錄網站
1. https://mp.weixin.qq.com/s?__biz=MzI5OTU4NTMwNQ==&mid=2247483792&idx=1&sn=c92c179896cecc45c8efc614863e2bf9&chksm=ec951be6dbe292f0027ddc877ecd3f910df724d9b6be336e0f5b07b70c9cb55920518994ed7b&scene=21#wechat_redirect
3. https://blog.csdn.net/AI_BigData_wh/article/details/77943787?locationNum=2&fps=1
4.https://www.cnblogs.com/GuoJiaSheng/p/4192301.html
5.https://wiki.mbalib.com/wiki/%E6%A8%A1%E6%8B%9F%E9%80%80%E7%81%AB%E7%AE%97%E6%B3%95