1. 程式人生 > 其它 >模擬退火詳解

模擬退火詳解

本演算法建議謹慎使用,否則一不小心就會變成模擬退役

爬山演算法

爬山演算法是一種貪心搜尋,每次從當前狀態的所有後繼狀態中選擇一個最優解繼續搜尋,直到達到一個區域性最優解後不再搜尋。

優點:好寫

缺點:容易陷入區域性最優解出不來

就像下圖一樣

多隨機幾個初始狀態就能減小(不能消除)缺點

模擬退火

模擬退火來源於金屬的冷卻過程

溫度高時,金屬內能較大,原子活動範圍大。

溫度低時,金屬內能較小,原子活動範圍小。

搜尋的時候也類似

T(溫度)初始值很大,每次呈上一個小於1的數,T越大,搜尋狀態越容易轉移

T比較大的時候,不用管下一個搜尋狀態是好是壞,大概率轉移

T比較小的時候,類似爬山演算法

可以看

這個裡邊的gif理解

為了保證正確性,可以多做幾次。

或者可以用上ctime,控制程式執行時間,卡題目時限,在規定時間多執行幾次

就像下面這樣

while(clock()<Time){}

注意不同的系統返回的時間的單位可能不同!


P1337 [JSOI2004]平衡點 / 吊打XXX 題解

P2538 [SCOI2008]城堡

在各種題目中都能用到,正確性不能保證,很少用作正解,但好的時候能媲美標算。

還有在各種提交答案題中都能用到