演算法 模擬退火

2021-08-20 11:56:20 字數 1187 閱讀 1247

之前覺得模擬退火演算法是很高大上的存在,一直沒有去了解。然後上次數模校賽我們就用到了模擬退火演算法,發現思路其實並不複雜。

模擬退火(simulated annealing),**於熱力學上的退火現象。退火現象就是,將固體加溫再徐徐冷卻,最後在常溫時就會呈現晶體狀態。從微觀角度來看,固體加溫時,內部粒子趨於無序,內能增大;徐徐冷卻時,粒子趨於有序,內能減小,在每個溫度都達到平衡態;最後在常溫時達到基態,此時內能減到最小。

其實退火現象只是演算法思路的**,用物理學的原理是無法解釋演算法的。從演算法的角度來看,模擬退火演算法是用於解決優化問題的演算法。優化問題即滿足題目約束的條件下求最優解的問題,常用的思路有廣度優先搜尋、貪心、動態規劃等。不過當乙個優化問題規模很大時,要找到最優解幾乎是不可能的,所以我們只能去找盡可能接近最優的解。如果用一般的思路求解,往往會陷入區域性最優,而模擬退火演算法可以避免這個問題。區域性最優解相當於函式的極小值,全域性最優解相當於函式的最小值,顯然,全域性最優解才是我們的目標。

模擬退火演算法的思路模仿了退火原理。首先選取乙個初始解,然後迭代更新,最後得到最優解。每次迭代都要先用舊解得到新解,再作比較,若新解更優,則用新解代替舊解;否則,以一定概率替換舊解。也就是說,每次迭代都趨於得到乙個更優的解,最後自然會得到乙個接近最優的解。不過,當舊解更優時,新解仍然有一定概率替換舊解,這樣演算法就有了一定的隨機性,即使舊解是區域性最優,新解也有機會跳出去。考慮到隨著迭代次數的增加,舊解已經越來越接近最優了,這時就應該減小新解跳出舊解的概率。

const solution domain;

const double init_t = 100;

const double min_t = 1;

const double rate = 0.98;

const int loop = 1000;

/** * @return: the initialized solution

*/solution init();

/** * @param s: the old solution

* @param domain: the domain of solution

* @return: the new solution

*/solution getnext(solution s, solution domain);

void sa()

}t *= rate;

}}

部落格

模擬退火演算法

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

模擬退火演算法

一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...

模擬退火演算法

1.模擬退火演算法認識 爬山演算法也是乙個用來求解最優化問題的演算法,每次都向著當前上公升最快的方向往上爬,但是初始化不同可能 會得到不同的區域性最優值,模擬退火演算法就可能跳出這種區域性最優解的限制。模擬退火演算法是模擬熱力學系統 中的退火過程。在退火過程中是將目標函式作為能量函式。大致過程如下 ...