第四章:經(jīng)典搜索之外——退火算法

英文名:Simulated annealing(刺激·退火)

一個(gè)沒有“下坡”的爬山算法是不完全的,因?yàn)槲覀兛梢灶A(yù)見它會(huì)掐在半山腰(局部最大值)。一個(gè)完全隨機(jī)的爬山算法,正相反,它是完全的但是極端低效。所以,我們的目標(biāo)就是開發(fā)一種在某些方面采用隨機(jī)性,但又保證完全和高效的算法。

模擬退火就是這樣一種兩者兼得的算法。退火(不是回火),作為一種金屬處理工藝,就是說(shuō)把金屬或玻璃加熱到高溫后,逐漸降溫,到達(dá)低能結(jié)晶態(tài),用來(lái)加強(qiáng)硬度的方法。

具體來(lái)講,我們?cè)诔跏紩r(shí)給定一個(gè)溫度函數(shù),然后讓這個(gè)溫度函數(shù)隨著時(shí)間(aka迭代數(shù))慢慢降低。我們也從當(dāng)前狀態(tài)的子狀態(tài)中隨機(jī)抽取一個(gè),如果這個(gè)子狀態(tài)把我們引向更高處,則它取代當(dāng)前狀態(tài),繼續(xù)迭代;如果子狀態(tài)是個(gè)下坡,有一定幾率我們?nèi)匀挥盟〈?dāng)前狀態(tài)。下坡越大,幾率越??;溫度越高,幾率越大。

def Simulated-Annealing(problem, schedule) returns a solution state
  current = Make-Node(problem.initial_state)
  for t in range(1,+infinity):
    T = schedule(t)
    if T = 0: return current
    next = random-successor(current)
    delta = next.value - current.value
    if delta > 0: current = next
    else: current = next, with probability exp(delta/T)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容