模擬退火算法


模擬退火

首先看一下度娘的定義

模擬退火算法(Simulate Anneal,SA)是一種通用概率演算法,用來在一個大的搜尋空間內找尋命題的最優解

模擬退火是一種非常好用的隨機化算法,它爬山算法的改進版

爬山算法的思想就是一個勁的找最優解,如果接下來的任何狀態都比當前狀態差,那么就停止

但是這樣顯然是錯誤的,比如下面這種情況

 

 

爬山找到A點之后就GG了,但是模擬退火算法會以一定的概率走向F,進而走向B,找到更優的解

 

至於這里為什么叫做“退火”,還要從物理學說起

在熱力學上,退火(annealing)現象指物體逐漸降溫的物理現象,溫度愈低,物體的能量狀態會低;夠低后,液體開始冷凝與結晶,在結晶狀態時,系統的能量狀態最低。大自然在緩慢降溫(亦即,退火)時,可“找到”最低能量狀態:結晶。但是,如果過程過急過快,快速降溫(亦稱「淬煉」,quenching)時,會導致不是最低能態的非晶形。

這里的最低能量狀態,也就是我們題目中的最優解

 

實現

因為要模擬退火的過程,因此我們先定義一些變量

$T$:當前溫度,由高溫到低溫,代表算法進行到了什么程度,一般為double類型

$\Delta T$:每次溫度的變化率,一般取$0.95 - 0.99$,模擬緩慢降溫的過程(上一次的溫度乘溫度變換率即為這一次的溫度)

$f(x)$ 當前狀態對應的值

 

上面我們提到,模擬退火會以一定的概率轉移到比當前差的解,那么這個概率是多少呢?科學家經過分析,當這個概率為$e^{-\frac{\Delta f}{T}}$時最優

 

那么根據退火的過程,我們不難得到模擬退火的算法流程

  1. 枚舉溫度$T$
  2. 計算出下一步的狀態
  3. 若下一步的狀態比當前狀態優或者滿足進行轉移的條件,進行轉移
  4. 降溫

 

因為模擬退火算法具有偶然性,因此我們一般需要對一個問題進行多次模擬退火算法

 

至於溫度的設定,以及執行算法次數的確定,這個需要看rp依題目而定

 

聽說模擬退火在計算幾何中有非常重要的應用,但是本蒟蒻現在連叉積都不會,所以這一塊等以后再補吧

 

 

題目

兩道很水不錯的題目

洛谷P1337

題解

 

洛谷P2503

題解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM