javascript
模拟退火总结+洛谷模板题(P1337 [JSOI2004]平衡点 / 吊打XXX)
原來就聽說過模擬退火,然后一直覺得神奇,但是沒有真正的去實現(xiàn)這個算法。
模擬退火對TSP之類的問題很實用。
1.概念:模擬退火算法(Simulate Anneal,SA)是一種通用概率演算法,用來在一個大的搜尋空間內(nèi)找尋命題的最優(yōu)解。模擬退火是由S.Kirkpatrick, C.D.Gelatt和M.P.Vecchi在1983年所發(fā)明的。V.?erny在1985年也獨立發(fā)明此演算法。模擬退火算法是解決TSP問題的有效方法之一。
模擬退火的出發(fā)點是基于物理中固體物質(zhì)的退火過程與一般組合優(yōu)化問題之間的相似性。模擬退火算法是一種通用的優(yōu)化算法,其物理退火過程由加溫過程、等溫過程、冷卻過程這三部分組成。
實際上模擬退火是一個很好理解的東西。簡單地說,就是將熱力學的理論套用到統(tǒng)計學上,將搜尋空間內(nèi)每一點想像成空氣內(nèi)的分子;分子的能量,就是它本身的動能;而搜尋空間內(nèi)的每一點,也像空氣分子一樣帶有“能量”,以表示該點對命題的合適程度。演算法先以搜尋空間內(nèi)一個任意點作起始:每一步先選擇一個“鄰居”,然后再計算從現(xiàn)有位置到達“鄰居”的概率。
與之相對的是爬山算法,爬山算法是找到一個局部最優(yōu)值之后就不會再往下搜索下去了。但是模擬退火會有一定的概率再去往下搜索下去,然后就會越來越接近最優(yōu)值。
2.模擬退火的基本要素
狀態(tài)空間與狀態(tài)產(chǎn)生函數(shù)
(1).搜索空間(又叫狀態(tài)空間)。一般范圍比較大,事我們自定義的可行解的集合。
(2).狀態(tài)函數(shù)。狀態(tài)函數(shù)將決定你是否要選用當前的解,對于一個好的退火來說,狀態(tài)函數(shù)的搜索空間應(yīng)該足夠大。
(3).候選解。一般采用隨機數(shù)來在一定密度內(nèi)隨機選取。
(4).概率分布。大多采取均勻分布或指數(shù)分布。
狀態(tài)轉(zhuǎn)移概率
(1).狀態(tài)轉(zhuǎn)移概率是指從一個狀態(tài)向另一個狀態(tài)的轉(zhuǎn)移概率。
(2).通俗的理解是接受一個新解為當前解的概率。
(3).它與當前的溫度參數(shù)T有關(guān),隨溫度下降而減小。
(4).一般采用Metropolis準則。
3.模擬退火模型
第一步是由一個產(chǎn)生函數(shù)從當前解產(chǎn)生一個位于解空間的新解;為便于后續(xù)的計算和接受,減少算法耗時,通常選擇由當前新解經(jīng)過簡單地變換即可產(chǎn)生新解的方法,如對構(gòu)成新解的全部或部分元素進行置換、互換等,注意到產(chǎn)生新解的變換方法決定了當前新解的鄰域結(jié)構(gòu),因而對冷卻進度表的選取有一定的影響。
第二步是計算與新解所對應(yīng)的目標函數(shù)差。因為目標函數(shù)差僅由變換部分產(chǎn)生,所以目標函數(shù)差的計算最好按增量計算。事實表明,對大多數(shù)應(yīng)用而言,這是計算目標函數(shù)差的最快方法。
第三步是判斷新解是否被接受,判斷的依據(jù)是一個接受準則,最常用的接受準則是Metropolis準則: 若Δt′<0則接受S′作為新的當前解S,否則以概率exp(-Δt′/T)接受S′作為新的當前解S。
第四步是當新解被確定接受時,用新解代替當前解,這只需將當前解中對應(yīng)于產(chǎn)生新解時的變換部分予以實現(xiàn),同時修正目標函數(shù)值即可。此時,當前解實現(xiàn)了一次迭代。可在此基礎(chǔ)上開始下一輪試驗。而當新解被判定為舍棄時,則在原當前解的基礎(chǔ)上繼續(xù)下一輪試驗。
模擬退火算法與初始值無關(guān),算法求得的解與初始解狀態(tài)S(是算法迭代的起點)無關(guān);模擬退火算法具有漸近收斂性,已在理論上被證明是一種以概率收斂于全局最優(yōu)解的全局優(yōu)化算法;模擬退火算法具有并行性。
4.參數(shù)控制
模擬退火算法的應(yīng)用很廣泛,可以求解NP完全問題,但其參數(shù)難以控制,其主要問題有以下三點:
(1) 溫度T的初始值設(shè)置問題。 溫度T的初始值設(shè)置是影響模擬退火算法全局搜索性能的重要因素之一、初始溫度高,則搜索到全局最優(yōu)解的可能性大,但因此要花費大量的計算時間;反之,則可節(jié)約計算時間,但全局搜索性能可能受到影響。實際應(yīng)用過程中,初始溫度一般需要依據(jù)實驗結(jié)果進行若干次調(diào)整。
(2) 退火速度問題。 模擬退火算法的全局搜索性能也與退火速度密切相關(guān)。一般來說,同一溫度下的“充分”搜索(退火)是相當必要的,但這需要計算時間。實際應(yīng)用中,要針對具體問題的性質(zhì)和特征設(shè)置合理的退火平衡條件。
(3) 溫度管理問題。 溫度管理問題也是模擬退火算法難以處理的問題之一。實際應(yīng)用中,由于必須考慮計算復(fù)雜度的切實可行性等問題,常采用如下所示的降溫方式:式中k為正的略小于1.00的常數(shù),t為降溫的次數(shù)。
5.算法改進
(1)設(shè)計合適的狀態(tài)產(chǎn)生函數(shù),使其根據(jù)搜索進程的需要表現(xiàn)出狀態(tài)的全空間分散性或局部區(qū)域性;
(2)設(shè)計高效的退火策略;
(3)避免狀態(tài)的迂回搜索;
(4)采用并行搜索結(jié)構(gòu);
(5)為避免陷入局部極小,改進對溫度的控制方式;
(6)選擇合適的初始狀態(tài);
(7)設(shè)計合適的算法終止準則。
對于洛谷這個題目。系統(tǒng)最穩(wěn)定的時候就是系統(tǒng)的整體能量最小的時候,系統(tǒng)能量就是整體的重力勢能。因為物重一定,繩子越短,重物越低,勢能越小,勢能又與物重成正比,所以,只要使得也就是總的重力勢能最小,就可以使系統(tǒng)平衡。
代碼如下:
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的模拟退火总结+洛谷模板题(P1337 [JSOI2004]平衡点 / 吊打XXX)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ellipsoid HDU - 5017
- 下一篇: gradle idea java ssm