模擬退火總結(模擬退火)


前言

因為聽說打得一手好隨機化搜索的yyb據佬在考場上D2T3重測前拿下90分怒虐全場,所以蒟蒻也聞風而動了

網上好多博客都講得十分高大上啊欺負我這種什么也不會的蒟蒻

於是蒟蒻就想嘗試用一種更淺顯通俗的方式去理解它

算法簡述

模擬退火適用的問題通常是一些求最優解的問題

比如,把問題抽象地看成一個長成這樣的毫無規律的函數,而最優解就是函數的最低點

眾所周知,對於一個沒有辦法在多項式復雜度的算法下完成求解的問題,我們通常會想到一種簡單粗暴的方法——貪心

選擇問題的某一個狀態,然后不斷向更優的情況靠近

比如從A出發,可以獲得局部最優解B,但這顯然不是全局最優解

顯然,這樣做的局限性是,過於局限在局部的一個凹部分而無法跳出去去尋找更優的解

原理

為了解決這一問題,科學家們想到了物理的退火降溫的過程——

一個處於很高溫度的物體,現在要給它降溫,使物體內能降到最低。

我們常規的思維是,越快越好,讓它的溫度迅速地降低。

然而,實際上,過快地降溫使得物體來不及有序地收縮,難以形成結晶。而結晶態,才是物體真正內能降到最低的形態。

正確的做法,是徐徐降溫,也就是退火,才能使得物體的每一個粒子都有足夠的時間找到自己的最佳位置並緊密有序地排列。開始溫度高的時候,粒子活躍地運動並逐漸找到一個合適的狀態。在這過程中溫度也會越降越低,溫度低下來了,那么粒子也漸漸穩定下來,相較於以前不那么活躍了。這時候就可以慢慢形成最終穩定的結晶態了。

那么,我們可不可以把找到最優解,與形成結晶態,這兩個過程聯系在一起呢?

於是,模擬退火誕生了。

實現過程

我們需要設定這幾個參數,模擬退火過程

  1. \(T\)——溫度
  2. \(\Delta T\)——溫度變化率,每次溫度等於上一次溫度乘上\(\Delta T\),實際應用時一般取\(0.95-0.99\),模擬徐徐降溫

再定義一些量

  1. \(x\)——當前選擇的解
  2. \(\Delta x\)——解變動值
  3. \(x_1\)——當前的目標解,等於\(x+\Delta x\)
  4. \(\Delta f\)——當前解的函數值與目標解函數值之差,等於\(f(x)-f(x_1)\)

我們給一個初始解\(x\),並讓它不斷變動。要模擬變動的大小隨溫度的降低而降低,我們每次的\(\Delta x\)應該在一個大小與\(T\)成正比的值域內隨機取值。

這時候我們就要考慮是否將當前解變為目標解。因為我們還是需要貪心,所以如果\(f(x_1)<f(x)\),那么接受目標解,\(x=x_1\)

那如果\(f(x_1)>f(x)\)呢?我們當然要以一定概率接受它啦,這樣才能跳出局部的限制,去搜尋更優的解,彌補貪心的局限性。那么這個概率應該是多少呢?同樣要模擬變動的大小隨溫度的降低而降低。科學家經過理論分析,得出這個概率應該是\(e^{\Delta f \over T}\)

如此反復選擇直到\(T\)趨近於0(可以設一個EPS)這時候我們認為我們當前的\(x\)就是最優解

用圖片來描述的話,就拿上面那個圖像尋找最優解為例

首先經過大幅波動,當前解由A->B->C,找到了一個比較滿意的解。

但還不能滿足。由於溫度還比較大,此時接受了一些不比當前解優的目標解,C->D->E,成功地爬了上去。而溫度還在慢慢減小。

終於,發現了一個更優解F,成功跳出了那個非常寬的局部凹函數

這時候,溫度越來越小了,很難再次接受不比當前解優的目標解,再次翻出去。解終於漸漸趨於穩定,並最終到達了G,找到了最優解

如此看來,基於隨機的模擬退火能很大程度上提高正確率,但也不可能完全正確。上面的例子只是隨意模擬出的一個情況。所以要多跑幾遍,取每一次得到的解的最優值。

關於參數

眾所周知,模擬退火最麻煩的地方在調參,只有合適的參數才能在一定的時間內很大概率跑出最優解。

蒟蒻的經驗暫時還不足呢qwq,不過也隨便談談吧。

首先,根據數據范圍和精度要求,可以基本確定EPS的大小了,不過也需要嘗試手動微調。

比較麻煩的是溫度和變動率。首先不必顧慮,都開大一點,先把最優解跑出來。

然后,手動二分吧,注意每個二分的值要多跑幾遍,因為模擬退火有偶然性,一次跑出最優解不代表大部分時候都能。

不過因為有兩個量,還不能直接二分,應該二分套二分比較合適

update:考試的時候寫提答,總結了一種方法:觀察法

一邊退火一邊輸出當前的溫度、解等信息,通過觀察大致感受一下解的降低速率

一般來說,如果解的降低速率比較均勻,跑出來的最優解也就好一些

不均勻的話,就調整參數,將解的降低速率較快的時間段的\(\Delta T\)變大一點,速率就能減慢一點。反之同理。

題目

洛谷P1337 【[JSOI2004]平衡點 / 吊打XXX】

模擬退火並不是正解,不過是一道入手好題,因為各部分實現都很方便

題解

更新中!


免責聲明!

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



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