首先看一下度孃的定義html
模擬退火算法(Simulate Anneal,SA)是一種通用機率演算法,用來在一個大的搜尋空間內找尋命題的最優解算法
模擬退火是一種很是好用的隨機化算法,它是登山算法的改進版spa
登山算法的思想就是一個勁的找最優解,若是接下來的任何狀態都比當前狀態差,那麼就中止htm
可是這樣顯然是錯誤的,好比下面這種狀況blog
登山找到A點以後就GG了,可是模擬退火算法會以必定的機率走向F,進而走向B,找到更優的解utf-8
至於這裏爲何叫作「退火」,還要從物理學提及get
在熱力學上,退火(annealing)現象指物體逐漸降溫的物理現象,溫度愈低,物體的能量狀態會低;夠低後,液體開始冷凝與結晶,在結晶狀態時,系統的能量狀態最低。大天然在緩慢降溫(亦即,退火)時,可「找到」最低能量狀態:結晶。可是,若是過程過急過快,快速降溫(亦稱「淬鍊」,quenching)時,會致使不是最低能態的非晶形。input
這裏的最低能量狀態,也就是咱們題目中的最優解it
由於要模擬退火的過程,所以咱們先定義一些變量io
$T$:當前溫度,由高溫到低溫,表明算法進行到了什麼程度,通常爲double類型
$\Delta T$:每次溫度的變化率,通常取$0.95 - 0.99$,模擬緩慢降溫的過程(上一次的溫度乘溫度變換率即爲這一次的溫度)
$f(x)$ 當前狀態對應的值
上面咱們提到,模擬退火會以必定的機率轉移到比當前差的解,那麼這個機率是多少呢?科學家通過分析,當這個機率爲$e^{-\frac{\Delta f}{T}}$時最優
那麼根據退火的過程,咱們不可貴到模擬退火的算法流程
由於模擬退火算法具備偶然性,所以咱們通常須要對一個問題進行屢次模擬退火算法
至於溫度的設定,以及執行算法次數的肯定,這個須要看rp依題目而定
據說模擬退火在計算幾何中有很是重要的應用,可是本蒟蒻如今連叉積都不會,因此這一塊等之後再補吧
兩道很水不錯的題目