模擬退火

模擬退火算法可用於求解組合問題。此處將模擬退火算法應用於求解旅行商問題，求出連接125個點的最小路線長度
使用模擬退火算法求解120個點的三維旅行商問題
模擬退火（Simulated annealing，縮寫作SA）是一種逼近給定函數全局最優的通用概率演算法，具體來說，它是一種元啟發算法，常用來在一定時間內，尋找在一個很大搜尋空間中的近似全局最優解。在有大量局部最優解時，模擬退火算法可以找到全局最優解。
模擬退火常用於搜索空間離散的情形（如旅行推銷員問題、布爾可滿足性問題、蛋白質結構預測、作業車間調度問題等）。對於在固定時間內找到近似全局最優優先於找到精確局部最優的問題，模擬退火算法可能優於梯度下降法或分支定界等精確方法。
模擬退火算法解決的問題包含多元目標函數與若干約束。實踐中，約束可作為目標函數的一部分進行懲罰。
Pincus (1970)、Khachaturyan et al (1979, 1981)、Kirkpatrick、Gelatt及Vecchi (1983)、Cerny (1985)等人先後提出過類似技術。現在的“模擬退火”算法在1983年為S. Kirkpatrick, C. D. Gelatt和M. P. Vecchi解決旅行推銷員問題所發明，V. Černý也在1985年獨立發明此演算法。
模擬退火算法中的慢冷卻是指在探索解空間的過程中，接受較差解的概率會緩慢下降。接受較差解可以更廣泛地搜索全局最優解。總的來說，模擬退火算法的工作原理如下：溫度從初始值逐漸降低到0，每個時間步長內，算法隨機選擇一個與當前解接近的解，並根據與溫度相關的概率選擇更優的。搜索過程中，這概率會趨近於1。
可通過求解概率密度函數的動力方程或隨機採樣法進行模擬。這種方法是N. Metropolis et al. (1953)發表的梅特羅波利斯-黑斯廷斯算法的改進版，是一種生成熱力學系統樣本狀態的蒙特卡羅方法。

**簡介**
“模擬退火”來自冶金學術語退火，是將材料加熱後再經特定速率冷卻的技術，目的是增大晶粒的體積，並且減少晶格中的缺陷，以改變材料的物理性質。材料中的原子原來會停留在使內能有局部最小值的位置，加熱使能量變大，原子會離開原來位置，而隨機在其他位置中移動。退火冷卻時速度較慢，使得原子有較多可能可以找到內能比原先更低的位置。
模擬退火的原理也和金屬退火的原理近似：我們將熱力學的理論套用到統計學上，將搜尋空間內每一點想像成空氣內的分子；分子的能量，就是它本身的動能；而搜尋空間內的每一點，也像空氣分子一樣帶有“能量”，以表示該點對命題的合適程度。演算法先以搜尋空間內一個任意點作起始：每一步先選擇一個“鄰居”，然後再計算從現有位置到達“鄰居”的概率。
可以證明，模擬退火算法所得解依概率收斂到全局最優解。
模擬退火法可用於精確算法失效的高難度計算優化問題，雖然通常只能獲得全局最優的近似，但對很多實際問題已經足夠。

**描述**
物理系統的熱力學狀態s，以及要最小化的函數（類似於系統當前狀態下的內能）。目標是將系統從任意初始狀態帶到內能儘可能小的狀態。
運用模擬退火算法搜索最大值，目標是達到最大值點。本例中，簡單的500px

**基本迭代**
模擬退火啟發式在每一步都會考慮當前狀態s的某鄰態，並以概率決定是否移動到狀態。概率最終引導系統進入低能狀態。這步驟一般會重複進行，直到系統達到滿足需求的狀態，或達到預設的計算量。

**狀態的鄰域**
解的優化包括計算問題狀態的鄰域，即由保守改變現狀態產生的新狀態。例如，在旅行推銷員問題中，狀態是待訪問城市的排列，狀態的鄰域是交換任意兩城市產生的排列集合。良定義的到鄰態的方法稱為移動，不同移動會產生不同的鄰態集。
爬山算法之類啟發法逐個尋找更好的鄰態來移動，並在無更好鄰態時停止，顯然這很容易陷入局部最優。元啟發算法利用解的鄰域作為探索解空間的一種方式，雖然更喜歡較好的鄰態，但也接受較差的鄰態，以免陷入局部最優。若運行時間夠長，則可以找到全局最優。

**接受概率**
從現狀態s轉移到候選的新狀態的概率由接受概率函數（acceptance probability function）確定，其取決於兩狀態的能量，以及稱作溫度的全局時變參數T。轉移到能量更小的狀態的概率更大。概率函數P在時也是正的，這可以防止算法陷入局部最優。
T趨近於0時，若，概率也要趨近於0或某正值。對足夠小的T，系統會越來越傾向於“下山”（向低能值移動）而避免“上山”。時，程序將簡化為貪心算法，只進行下山轉移。
在模擬退火的原始描述中，時概率，即無論溫度如何，程序找到下山的方法時總會下山。許多模擬退火算法的描述和實現仍將此條件作為方法定義的一部分，但這條件實際上並非必須。
P函數通常是這樣選擇的：當差值增加時，接受較小上山轉移的概率就會比較大的更大。不過，在滿足上述要求的前提下，這要求並非絕對必要。
鑑於這些特性，溫度T在控制系統狀態s演化方面起到關鍵作用，因為它對系統能量變化非常敏感。確切地說，T的大小決定著s演化敏感的“粒度”。

**退火歷程**
算法名稱與靈感要求嵌入一個與溫度有關的有趣特徵。開始時，溫度T被設為一個較大值（或無窮大），按用戶指定的退火歷程，每次迭代降溫，但必須在一定時間預算內結束為。這樣，預計系統最初會在搜索空間中包含良好解的廣闊區域內遊蕩，忽略能量函數的微小特徵；然後，向能量更低的區域漂移，最後根據梯度下降法啟發式向下移動。
對任意給定的有限問題，隨著退火歷程延長，模擬退火算法以全局最優解終止的概率趨近於1。但這理論結果並不很有用，因為確保顯著成功概率的耗時通常大於暴力搜索整個解空間的耗時。

**偽代碼**
尋找能量  最低的狀態 
s := s0; e := E(s)                  // 設定目前狀態為 s0，其能量 E(s0)
k := 0                              // 評估次數 k
while k  emin         // 若還有時間（評估次數 k 還不到 kmax）且結果還不夠好（能量 e 不夠低）則：
sn := neighbour(s)              // 隨機選取一鄰近狀態 sn
en := E(sn)                     // sn 的能量為 E(sn)
if random() 
下面以自然語言解說模擬退火算法的演算步驟。

**初始化**
由一個產生函數從當前解產生一個位於解空間的新解，並定義一個足夠大的數值作為初始溫度。

**迭代過程**
迭代過程是模擬退火算法的核心步驟，分為新解的產生和接受新解兩部分：
#由一個產生函數從當前解產生一個位於解空間的新解；為便於後續的計算和接受，減少算法耗時，通常選擇由當前新解經過簡單地變換即可產生新解的方法，如對構成新解的全部或部分元素進行置換、互換等，注意到產生新解的變換方法決定了當前新解的鄰域結構，因而對冷卻進度表的選取有一定的影響。
#計算與新解所對應的目標函數差。因為目標函數差僅由變換部分產生，所以目標函數差的計算最好按增量計算。事實表明，對大多數應用而言，這是計算目標函數差的最快方法。
#判斷新解是否被接受，判斷的依據是一個接受準則，最常用的接受準則是Metropolis準則：若Δt′s、e為sbest、ebest，然後重啟退火歷程。重啟的決定可基於多個標準，其中值得注意的是包括基於固定步數、基於當前能量與迄今最優的能量、隨機重啟等等。

**相關算法**
 交互式梅特羅波利斯-黑斯廷斯算法（或順序蒙特卡洛）將模擬退火轉移同配備交互式回收機制的最佳擬合個體的接受-剔除相結合。- 量子退火用“量子擾動”而非熱波動來穿越目標函數中較薄的障礙。- 隨機隧道法試圖以隧道穿越障礙，克服了隨溫度降低，模擬退火越來越難以擺脫局部最優的問題。- 禁忌搜索通常會移動到能量較低的鄰態，發現陷入局部最優時，就會採取上坡轉移，並會保留已知解列表（即“禁忌表”）以避免循環。- 雙相演化是一組算法與過程（SA屬於其中），利用搜索空間的相變，在局部搜索與全局搜索之間進行調節。- 反應式搜索優化將機器學習與優化相結合，增加內部反饋迴路，根據問題、實例與當前解周圍的情形，對算法的自由參數進行自我調整。- 遺傳算法保留一組解（“池”，pool），而非一個解。新的候選解可由突變（如SA）和“重組”從池中產生。概率標準和SA中所用的類似，用於選擇突變或重組的解，並剔除多餘解。- 文化基因算法使用一組既合作又競爭的搜索器（agent）搜索解。有時搜索器的策略設計模擬退火，以便在重組之前獲得高質量解。退火也被認為是增加搜索多樣性的一種機制。 - 漸進優化在優化過程中對目標函數進行“平滑化”處理。- 蟻群算法（ACO）用許多搜索器遍歷解空間，並找到局部較優的區域。- 交叉熵法（CE）通過參數化概率分佈生成候選解。參數通過交叉熵最小化進行更新，以便在下次迭代中生成更好的樣本。- 和聲搜索模擬音樂家即興演奏的過程，每個音樂家演奏一個音符，共同尋找最佳的和聲。- 隨機優化是一系列方法的總稱，包括模擬退火等很多方法。- 粒子群優化是一種以群體智能為模型的算法，能在搜索空間中找到優化問題的解，或在有目標的情形下模擬、預測群體行為。- 莖根算法（runner-root algorithm，RRA）是一種元啟發優化算法，用於解決單模態和多模態問題，靈感來自植物的莖與葉的關係。- 智能水滴算法（Intelligent water drops algorithm，IWD）模仿自然水滴的行為解決優化問題。- 並行退火在不同溫度（或哈密頓量）下模擬模型副本，以克服潛在障礙。- 多目標模擬退火用於多目標優化。

**另見**

**參考資料**

**延伸閲讀**
A. Das and B. K. Chakrabarti (Eds.),  Quantum Annealing and Related Optimization Methods, Lecture Note in Physics, Vol. 679, Springer, Heidelberg (2005)
*s2cid=851736 - dead-url=no 
*pmc=4912009
*V.Vassilev, A.Prahova: "The Use of Simulated Annealing in the Control of Flexible Manufacturing Systems", International Journal INFORMATION THEORIES & APPLICATIONS,  VOLUME 6/1999 date=20210902232623 

**參閲**
演算法
*旅行推銷員問題
*蟻群算法
*遺傳算法

**外部鏈接**
  基於MATLAB實現的全局優化算法：SIMPSA（SA和單純的組合），洗牌複雜的演化（SCA）和粒子群優化（PSO）。-  Simulated Annealing date=20210626212745  A Javascript app that allows you to experiment with simulated annealing. Source code included.-  "General Simulated Annealing Algorithm" date=20080923163834  An open-source MATLAB program for general simulated annealing exercises.- Self-Guided Lesson on Simulated Annealing A Wikiversity project.-  Google in superposition of using, not using quantum computer date=20120112021754  Ars Technica discusses the possibility that the D-Wave computer being used by Google may, in fact, be an efficient simulated annealing co-processor.-  date=20210710224156  A Simulated Annealing-Based Multiobjective Optimization Algorithm: AMOSA.