模擬退火（，縮寫作 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，以及要最小化的函式 E s（類似於系統當前狀態下的內能）。目標是將系統從任意初始狀態帶到內能儘可能小的狀態。 基本迭代 模擬退火啟發式在每一步都會考慮當前狀態 s 的某鄰態 s，並以機率決定是否移動到狀態 s。機率最終引導系統進入低能狀態。這步驟一般會重複進行，直到系統達到滿足需求的狀態，或達到預設的計算量。 狀態的鄰域 解的最佳化包括計算問題狀態的鄰域，即由保守改變現狀態產生的新狀態。例如，在旅行推銷員問題中，狀態是待訪問城市的排列，狀態的鄰域是交換任意兩城市產生的排列集合。良定義的到鄰態的方法稱為移動，不同移動會產生不同的鄰態集。 爬山演算法之類啟發法逐個尋找更好的鄰態來移動，並在無更好鄰態時停止，顯然這很容易陷入區域性最優。元啟發演算法利用解的鄰域作為探索解空間的一種方式，雖然更喜歡較好的鄰態，但也接受較差的鄰態，以免陷入區域性最優。若執行時間夠長，則可以找到全域性最優。 接受機率 從現狀態 s 轉移到候選的新狀態 s_mathrm new 的機率由接受機率函式（acceptance probability function）P e e_mathrm new T 確定，其取決於兩狀態的能量 e E s e_mathrm new E s_mathrm new，以及稱作溫度的全域性時變引數 T。轉移到能量更小的狀態的機率更大。機率函式 P 在 e_mathrm newe 時也是正的，這可以防止演算法陷入區域性最優。 T 趨近於 0 時，若 e_mathrm new e，機率 P e e_mathrm new T 也要趨近於 0 或某正值。對足夠小的 T，系統會越來越傾向於 下山（向低能值移動）而避免 上山。T0 時，程式將簡化為貪心演算法，只進行下山轉移。 在模擬退火的原始描述中，e_mathrm new e 時機率 P e e_mathrm new T1，即無論溫度如何，程式找到下山的方法時總會下山。許多模擬退火演算法的描述和實現仍將此條件作為方法定義的一部分，但這條件實際上並非必須。 P 函式通常是這樣選擇的：當差值 e_mathrm newe 增加時，接受較小上山轉移的機率就會比較大的更大。不過，在滿足上述要求的前提下，這要求並非絕對必要。 鑑於這些特性，溫度 T 在控制系統狀態 s 演化方面起到關鍵作用，因為它對系統能量變化非常敏感。確切地說，T 的大小決定著 s 演化敏感的 粒度。 退火歷程 演算法名稱與靈感要求嵌入一個與溫度有關的有趣特徵。開始時，溫度 T 被設為一個較大值（或無窮大），按使用者指定的退火歷程，每次迭代降溫，但必須在一定時間預算內結束為 T0。這樣，預計系統最初會在搜尋空間中包含良好解的廣闊區域內遊蕩，忽略能量函式的微小特徵；然後，向能量更低的區域漂移，最後根據梯度下降法啟發式向下移動。 對任意給定的有限問題，隨著退火歷程延長，模擬退火演算法以全域性最優解終止的機率趨近於 1。但這理論結果並不很有用，因為確保顯著成功機率的耗時通常大於暴力搜尋整個解空間的耗時。 虛擬碼 尋找能量 E s 最低的狀態 s s s0 e E s 設定目前狀態為 s0，其能量 E s0 k 0 評估次數 k while k kmax and e emin 若還有時間（評估次數 k 還不到 kmax）且結果還不夠好（能量 e 不夠低）則： sn neighbour s 隨機選取一鄰近狀態 sn en E sn sn 的能量為 E sn if random P e en temp kkmax 決定是否移至鄰近狀態 sn s sn e en 移至鄰近狀態 sn k k 1 評估完成，次數 k 加一 return s 返回狀態 s 下面以自然語言解說模擬退火演算法的演算步驟。 初始化 由一個產生函式從當前解產生一個位於解空間的新解，並定義一個足夠大的數值作為初始溫度。 迭代過程 迭代過程是模擬退火演算法的核心步驟，分為新解的產生和接受新解兩部分： 由一個產生函式從當前解產生一個位於解空間的新解；為便於後續的計算和接受，減少演算法耗時，通常選擇由當前新解經過簡單地變換即可產生新解的方法，如對構成新解的全部或部分元素進行置換、互換等，注意到產生新解的變換方法決定了當前新解的鄰域結構，因而對冷卻進度表的選取有一定的影響。 計算與新解所對應的目標函式差。因為目標函式差僅由變換部分產生，所以目標函式差的計算最好按增量計算。事實表明，對大多數應用而言，這是計算目標函式差的最快方法。 判斷新解是否被接受，判斷的依據是一個接受準則，最常用的接受準則是 Metropolis 準則：若 Δt0 則接受 S作為新的當前解 S，否則以機率 exp（ΔtT）接受 S作為新的當前解 S。 當新解被確定接受時，用新解代替當前解，這隻需將當前解中對應於產生新解時的變換部分予以實現，同時修正目標函式值即可。此時，當前解實現了一次迭代。可在此基礎上開始下一輪試驗。而當新解被判定為捨棄時，則在原當前解的基礎上繼續下一輪試驗。 模擬退火演算法與初始值無關，演算法求得的解與初始解狀態 S（是演算法迭代的起點）無關；模擬退火演算法具有漸近收斂性，已在理論上被證明是一種以機率 1 收斂於全域性最優解的全域性最佳化演算法；模擬退火演算法具有並行性。 停止準則 迭代過程的一般停止準則：溫度 T 降低至某閾值時，或連續若干次迭代均未接受新解時，停止迭代，接受當前尋找的最優解為最終解。 退火方案 在某個溫度狀態 T 下，當一定數量的迭代操作完成後，降低溫度 T，在新的溫度狀態下執行下一個批次的迭代操作。 選擇引數 將模擬退火演算法用於實際問題，需要指定狀態空間、能量（目標）函式、候選解生成器、接受機率函式、退火歷程以及初始溫度。這些選擇會對演算法效率產生重大影響，遺憾的是它們的選擇不適合所有問題，也沒有針對特定問題找到最佳選擇的通用方法。下面幾節將給出一些通用指導。 充分近的鄰態 模擬退火可建模為搜尋圖上的隨機遊走，其頂點是所有狀態，邊為候選的移動。的基本要求是提供從初態到任何可能是全域性最優態的足夠短路徑，這要求搜尋圖的直徑足夠小。以上面的旅行推銷員問題為例，n 20 個城市的搜尋空間有 n 2432902008176640000（243 億億）個狀態，而每個頂點有 sum_k1n1 kfrac n n12190 條邊（來自 n 選 2），圖直徑為 n1。 轉移機率 要研究模擬退火演算法在特定問題上的行為，可考慮演算法實施過程中各種設計選擇產生的轉移機率。對搜尋圖中的每條邊 ss，轉移機率定義為現態為 s 時轉移到 s 的機率，取決於指定的當前溫度、生成的候選移動的順序及接受機率函式（注意轉移機率不是簡單的 P e e T，因為候選轉移是以序列測試的）。 接受機率 、、的指定是多餘的，因為實踐中通常會使用相同的接受函式，並根據具體問題調整其他函式。 在 Kirkpatrick et al 的方法中，若 e e 則接受機率函式 P e e T1，否則為 exp eeT。表面上看，這個公式是透過類比物理系統的轉移來證明的；在 T1 且梅特羅波利斯 黑斯廷斯的提議分佈對稱時，對應梅特羅波利斯 黑斯廷斯演算法。即使與梅特羅波利斯 黑斯廷斯演算法中的提議分佈類似的函式不對稱或根本不是機率分佈，也常用於模擬退火。因此，轉移概率同類似物理系統的轉移機率並不對應，恆定溫度 T 下的長期狀態分佈也不必同物理系統在任何溫度下的熱力平衡態分佈有任何相似處。儘管如此，大多數模擬退火的描述都會假定原接受函式，而這種函式可能在許多模擬退火的實現中都是硬編碼（hardcoded）的。 Moscato and Fontanari 1990 與 Dueck and Scheuer 分別提出，確定性更新（即不基於機率接受規則的）可加速最佳化，且不影響最終質量。Moscato and Fontanari 透過觀察 閾值更新 退火的類 比熱 曲線得出結論：在模擬退火演算法中，Metropolis 更新的隨機性在尋找近優最小值的過程中沒有發揮主要作用。 相反，他們認為 高溫下成本函式景觀的平滑化與冷卻過程中最小值的逐步確定是模擬退火演算法成功的基本要素。 後來，由於 Dueck and Scheuer 的命名，這種方法也稱作 閾值接受法。Franz Hoffmann and Salamon 2001 表明，在一大類模擬成本 能量景觀隨機遊走的演算法中，確定性更新策略確實是最優策略。 高效生成鄰態 選擇候選生成器時，必須考慮到演算法迭代幾次後，現態的能量將低於隨機狀態。因此一般來說，生成器應偏向更接近目標狀態 s 能量的鄰域。這種啟發式（也是梅特羅波利斯 黑斯廷斯演算法的主要原理）往往會排除 非常好 與 非常壞 的轉移，不過前者通常更少見，所以啟發式往往相當有效。 例如，在上述旅行商問題中，低能旅行中交換兩連續城市對能量（總距離）影響不大，而交換兩任意城市更可能增加能量。因此，連續交換優於隨機交換，儘管後者能提供更優路徑（n1 次交換，而非 n n12 次）。 啟發式一個更準確的詮釋是，應先嚐試 P E s E s T 較大的鄰態 s。對上述 標準 接受函式 P 來說，這意味著 E s E s 在 T 或更小的數量級上因此在上述旅行商問題中，可用交換兩隨機城市的，並設定兩城市距離超過 T 時不予選擇。 避免障礙 選擇候選生成器時，還必須儘量減少能量遠低於所有鄰態的 深 區域性最優（或相連狀態集）數，這種 能量函式盆地 可能會以較高機率（與盆地中狀態數大致呈正比）與較長時間（與周圍狀態同盆地底部的能量差大致呈指數關係）困住模擬退火演算法。 一般來說設計不出既能滿足這一目標，又能優先處理能量相近的候選粒子的候選發生器。另一方面，往往可對生成器進行相對簡單的修改，大大提高模擬退火的效率。例如，在旅行商問題中，不難找到兩條長度幾乎相等的路線 A B，使得 1 A 最優、2 將 A 轉換為 B 的城市交換序列要經歷比二者長得多的距離、3 A 可透過翻轉（顛倒順序）一組連續的城市序列變為 B。此例中，A B 就處於不同的 盆地 中，但若生成器執行隨機分段翻轉，則將位於同一個盆地。 冷卻歷程 模擬退火的物理類比假設冷卻速率足夠低，當前狀態的機率分佈比任意時刻都接近熱力平衡。 然而，弛豫時間（relaxation time，溫度變化後恢復平衡耗時）很大程度上取決於能量函式的 地形 和當前溫度。模擬退火演算法中，弛豫時間還以非常複雜的方式取決於候選生成器。注意所有引數通常作為黑盒函式提供給模擬退火演算法。因此，理想的冷卻速度無法事先確定，只能根據經驗分析具體問題。自適應模擬退火演算法將冷卻歷程同搜尋進度聯絡起來，解決了這一問題。其他自適應法有熱力學模擬退火，會根據熱力學定律，依兩狀態能量差自動調整每步的溫度。 重啟 有時，從現態出發不如回到明顯更優的解，這一過程稱作模擬退火的重啟（restarting）。為此，置 s、e 為 sbest、ebest，然後重啟退火歷程。重啟的決定可基於多個標準，其中值得注意的是包括基於固定步數、基於當前能量與迄今最優的能量、隨機重啟等等。 相關演算法 互動式梅特羅波利斯 黑斯廷斯演算法（或順序蒙特卡洛）將模擬退火轉移同配備互動式回收機制的最佳擬合個體的接受 剔除相結合。 量子退火用 量子擾動 而非熱波動來穿越目標函式中較薄的障礙。 隨機隧道法試圖以隧道穿越障礙，克服了隨溫度降低，模擬退火越來越難以擺脫區域性最優的問題。 禁忌搜尋通常會移動到能量較低的鄰態，發現陷入區域性最優時，就會採取上坡轉移，並會保留已知解列表（即 禁忌表）以避免迴圈。 雙相演化是一組演算法與過程（SA 屬於其中），利用搜索空間的相變，在區域性搜尋與全域性搜尋之間進行調節。 反應式搜尋最佳化將機器學習與最佳化相結合，增加內部反饋迴路，根據問題、例項與當前解周圍的情形，對演算法的自由引數進行自我調整。 遺傳演算法保留一組解（池，pool），而非一個解。新的候選解可由突變（如 SA）和 重組 從池中產生。機率標準和 SA 中所用的類似，用於選擇突變或重組的解，並剔除多餘解。 文化基因演算法使用一組既合作又競爭的搜尋器（agent）搜尋解。有時搜尋器的策略設計模擬退火，以便在重組之前獲得高質量解。退火也被認為是增加搜尋多樣性的一種機制。 漸進最佳化在最佳化過程中對目標函式進行 平滑化 處理。 蟻群演算法（ACO）用許多搜尋器遍歷解空間，並找到區域性較優的區域。 交叉熵法（CE）透過引數化機率分佈生成候選解。引數透過交叉熵最小化進行更新，以便在下次迭代中生成更好的樣本。 和聲搜尋模擬音樂家即興演奏的過程，每個音樂家演奏一個音符，共同尋找最佳的和聲。 隨機最佳化是一系列方法的總稱，包括模擬退火等很多方法。 粒子群最佳化是一種以群體智慧為模型的演算法，能在搜尋空間中找到最佳化問題的解，或在有目標的情形下模擬、預測群體行為。 莖根演算法（runnerroot 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 VVassilev APrahova The Use of Simulated Annealing in the Control of Flexible Manufacturing Systems International Journal INFORMATION THEORIES APPLICATIONS VOLUME 61999 參閲 演演算法 旅行推銷員問題 蟻群演算法 遺傳演算法 外部連結 基於 MATLAB 實現的全域性最佳化演算法：SIMPSA（SA 和單純的組合），洗牌複雜的演化（SCA）和粒子群最佳化（PSO）。 Simulated Annealing A Javascript app that allows you to experiment with simulated annealing Source code included General Simulated Annealing Algorithm An opensource MATLAB program for general simulated annealing exercises SelfGuided Lesson on Simulated Annealing A Wikiversity project Google in superposition of using not using quantum computer Ars Technica discusses the possibility that the DWave computer being used by Google may in fact be an efficient simulated annealing coprocessor A Simulated AnnealingBased Multiobjective Optimization Algorithm AMOSA Category 演算法 category 最最佳化演演算法 category 蒙地卡羅方法