模擬退火算法

模擬退火

首先看一下度孃的定義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}}$時最優

 

那麼根據退火的過程,咱們不可貴到模擬退火的算法流程

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

 

由於模擬退火算法具備偶然性,所以咱們通常須要對一個問題進行屢次模擬退火算法

 

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

 

據說模擬退火在計算幾何中有很是重要的應用,可是本蒟蒻如今連叉積都不會,因此這一塊等之後再補吧

 

 

題目

兩道很水不錯的題目

洛谷P1337

題解

 

洛谷P2503

題解

相關文章
相關標籤/搜索