日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

搜索 —— 启发式搜索 —— 模拟退火

發(fā)布時間:2025/3/17 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索 —— 启发式搜索 —— 模拟退火 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【概述】

模擬退火(Simulated Annealing,SA),其類似于物理學(xué)上金屬退火的過程,故稱為模擬退火,其是一個隨機(jī)化與貪心結(jié)合的算法,在你 RP 較好或數(shù)據(jù)范圍比較小的時候,可以輕松解決許多難題。

模擬退火的原理與金屬退火的原理近似:

  • 將熱力學(xué)的理論套用到統(tǒng)計(jì)學(xué)上
  • 將搜尋空間內(nèi)每一點(diǎn)想像成空氣內(nèi)的分子
  • 搜尋空間內(nèi)的每一點(diǎn),也像空氣分子一樣帶有動能,其用于表示該點(diǎn)對命題的合適程度
  • 演算法先以搜尋空間內(nèi)一個任意點(diǎn)作起始:每一步先選擇一個相鄰的點(diǎn),然后再計(jì)算從現(xiàn)有位置到達(dá)相鄰點(diǎn)的概率

【主要思路】

我們模擬物理退火的三個過程:加溫、等溫、冷卻,來歸納一下模擬退火算法的主要思路:

首先,確定一個初始溫度 T,這個參數(shù)是隨機(jī)選擇的,初始溫度選擇的越好,算法表現(xiàn)就越好,但具體該選何值,沒有一個明確的界定方法,只能依靠 RP 來選,不過據(jù)說有些大佬可以根據(jù)題目推出最優(yōu)初始溫度

然后,當(dāng)溫度大于一個邊界值時,我們將當(dāng)前狀態(tài)的答案與下一狀態(tài)的答案進(jìn)行比較:

  • 如果 res<newRes,轉(zhuǎn)移答案
  • 如果 res>newRes,有一定概率轉(zhuǎn)移答案

在擴(kuò)展?fàn)顟B(tài)時有一個小方法:nextSta=nowSta+(rand()?2?RAND_MAX)?T,這樣的原理是:(rand()?2?RANDMAX) 的范圍是從負(fù)數(shù)到正數(shù)的,這樣在擴(kuò)展坐標(biāo)的時候就可以多方向擴(kuò)展,不會只在一個方向上更新。

其次,確定轉(zhuǎn)移答案的概率,由于轉(zhuǎn)移答案的概率需要隨著時間的推移res 和 newRes 差值的增大而增大,因此常表示為:,其中

最后,我們模擬降溫過程,對 T 乘以一個小于但十分接近于 1 的數(shù) delta,以體現(xiàn)時間對答案的影響。

這樣,隨著溫度不斷降低,變化幅度也越來越小,接受一個更劣的解的概率也越來越小。

void SA(double nowSta){int T = ****; //初始溫度double delta=0.99;int res=getRes(nowSta);//初始狀態(tài)能得到的答案while (T > EPS) { // EPS是一個大于0的極小值,用于精度的比較,一般取1E-9~1E-15int nextSta = nowSta + (rand() * 2 - RAND_MAX)*T; //擴(kuò)展?fàn)顟B(tài)int newRes = getRes(nextSta); //記錄下一個狀態(tài)能得到的答案double pr = exp((res - newRes) / T) * RAND_MAX;//一定的概率if (res < newRes || pr > rand()){//新的代價(jià)小于當(dāng)前代價(jià),或在一定概率下nowSta = nextSta;//更新當(dāng)前狀態(tài)res = newRes;//更新新狀態(tài)的答案}T *= delta; //降溫的過程,將溫度減小} }

?

總結(jié)

以上是生活随笔為你收集整理的搜索 —— 启发式搜索 —— 模拟退火的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。