模擬退火算法(Simulate Anneal,SA)是一種通用概率演算法,用來在一個大的搜尋空間內找尋命題的最優解。模擬退火是由S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所發明的。V.Černý在1985年也獨立發明此演算法。模擬退火算法是解決TSP問題的有效方法之一。
模擬退火的出發點是基於物理中固體物質的退火過程與一般組合優化問題之間的相似性。模擬退火算法是一種通用的優化算法,其物理退火過程由加溫過程、等溫過程、冷卻過程這三部分組成。——百度百科
- 核心:隨機化,貪心
- 算法流程:隨機一個新解,當新解比舊解更優時,選擇新解,當新解比舊解劣時,以一定概率選擇新解,每次隨機新解後降一次溫,最後當溫度小於一個臨界值時,退出退火過程,就有很大概率找到了最優解
就像這樣
選擇劣解的概率
這裏的概率計算公式如下
(至於爲什麼,問S.Kirkpatrick, C.D.Gelatt,M.P.Vecchi和V.Černý去)
temperature指當前退到的溫度,detla是新解與舊解的差(小於零)
易得此值隨着溫度的降低而漸漸趨近於1
於是在程序中,我們如果將得到劣解是否接受的判定條件設爲
>rand()/RAND_MAX
由於0<rand()/RAND_MAX<=1且概率均等,那麼隨着溫度的降低,不等號左側趨近於1,右側等於[0,1]的概率均等,故條件滿足的可能性就越小,選擇較劣解的可能性就越小
一些其他的參數問題
1.上文提到的
- T(temperature)
- detla=s現-s原
2.其他必要的
- eps(下限溫度)
- D(降溫速率)
對於參數的設置,我們可以嘗試一下手動二分,由於T,D與運行時間成正比,eps與運行時間成反比,故可以調整這三個參數,使保證精度的同時保證時間上限