模擬退火入門

2022-04-29 20:12:09 字數 1483 閱讀 9942

模擬退火演算法(simulate anneal,sa)是一種通用概率演演算法,用來在乙個大的搜尋空間內找尋命題的最優解。模擬退火是由s.kirkpatrick, c.d.gelatt和m.p.vecchi在2023年所發明的。v.černý在2023年也獨立發明此演演算法。模擬退火演算法是解決tsp問題的有效方法之一。

模擬退火的出發點是基於物理中固體物質的退火過程與一般組合優化問題之間的相似性。模擬退火演算法是一種通用的優化演算法,其物理退火過程由加溫過程、等溫過程、冷卻過程這三部分組成。

首先要說明,這是乙個建立在隨機基礎上的,不一定正確的演算法。但是模擬退火在oi中是一種在最優化問題中騙分的好方法,對於一些奇奇怪怪的多元函式也可以用這個方法來求解。

模擬退火,顧名思義就是模擬退火的過程,也就是模擬所有高溫雜亂的原子到低溫穩定的原子的過程,通常是先讓目標隨機大幅度移動,在此過程中不斷更新答案,最後慢慢到達穩定的答案。通過多次重複的此過程,到達最優解。

根據熱力學規律並結合計算機對離散資料的處理, 我們定義: 如果當前溫度為 t , 當前狀態與新狀態之間的能量差為 δe

, 則發生狀態轉移的概率為:

p(δe)=eδekt

顯然如果 δe為正的話轉移是一定會成功的, 但是對於 δe<0

我們則以上式中計算得到的概率接受這個新解.

然後我們維護溫度 t即可. 這裡我們有三個引數: 初溫 t0 , 降溫係數 d , 終溫 tk一般 t0是個比較大的數, d 是個接近 1 但是小於 1 的值, tk 是個接近 0的正值.首先讓溫度 t=t0然後進行一次轉移嘗試, 然後讓 t=dt當 t

請看例題####1.安利乙個模擬退火的模板:####

void fire()//模擬退火

}

2.t在程式中的作用:####

1.可以說t是整個函式的核心部分,t的處理通常決定了退火的成功與否。

2.首先t乙個類似cnt的數,表示溫度是否降到0(答案是否趨於穩定)

3.在隨機新解時t決定了新解的波動範圍,溫度越低波動越小,這樣可以更大的概率更精確地命中最優解(形象來說就是在溫度越低時原子波動越小)。

4.t還影響了是否更新乙個不是優於當前解的目標,例如剛剛的題目中:

if(exp(-de/t)*rand_max>rand())

###注意事項:###

1.關於t和delta值的確定,如果太大會導致降溫太快而錯過最優解,但太小又會導致時間超時,所以建議用極限資料測試一下時間。希望大家多做幾個類似題目感受,才能更好把握。

2.是否更新不是最更解的目標,需要通過熱力學公式p(δe)=eδekt來靈活運用。

##總結##

其實在上面的例子中也可以體現出來, 這個演算法的要點在於新解的選取以及引數的調整...實際上利用退火過程的性質大膽隨機再配合調參經驗一般效果拔群owo,用熟了之後絕對是騙分利器,但是作為乙個隨機化演算法並不一定能找到最優解。

###推薦題目###

poj 2069 最小包含球問題求解

洛谷 2503 均分資料

洛谷 3936 coloring

模擬退火入門 POJ 2420

題目大意 給出平面上n 100 個點,你需要找到乙個這樣的點,使得這個點到n個點的距離之和盡可能小。輸出這個最小的距離和 四捨五入到最近的整數 解題思路 如果下午不是馬原課無聊,學習了一下模擬退火的思想,大概看到這題也沒太多想法,不過是真的神奇啊,先放上我覺得講得很簡單的模擬退火演算法的乙個講解 大...

數學建模 模擬退火入門介紹

模擬退火演算法 於固體退火原理,將固體加溫至充分高,再讓其徐徐冷卻,加溫時,固體內部粒子隨溫公升變為無序狀,內能增大,而徐徐冷卻時粒子漸趨有序,在每個溫度都達到平衡態,最後在常溫時達到基態,內能減為最小。根據metropolis準則,粒子在溫度t時趨於平衡的概率為e e kt 其中e為溫度t時的內能...

模擬退火演算法

w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...