啓發式優化算法之1--模擬退火算法,結合實例

目錄

 

我的基礎

那麼模擬退火 算法的特點是什麼呢?

總結

主要問題


我的基礎

優化算法的要素如下,

目標函數;約束條件(自變量範圍等);判斷條件;自變量。

經過學習,以上的專業術語是:狀態函數 <包含了計算和狀態轉移的判斷>;搜索空間(狀態空間)。

那麼模擬退火 算法的特點是什麼呢?

答:有一個候選解,採用隨機數在一定範圍內隨機選取。

本文的主要目的就是結合實際題目,理解上述一句話。要理解上述含義,需要了解一個準則——Metropolis準則。

這個準則用來判斷狀態轉移條件和概率。

根據Metropolis準則,粒子在溫度T時趨於平衡的概率——也就是說出現能量差爲dE的降溫的概率爲P(dE),表示爲:P(dE) = exp( dE/(kT) )]。其中E爲溫度T時的內能,dE爲其改變量爲負值,k爲Boltzmann常數。因此P與T正相關。

用固體退火模擬組合優化問題,將內能E模擬爲目標函數值f,溫度T演化成控制參數t,即得到解組合優化問題的模擬退火算法:由初始解i和控制參數初值t開始,對當前解重複“產生新解→計算目標函數差→接受或捨棄”的迭代,並逐步衰減t值,算法終止時的當前解即爲所得近似最優解,這是基於蒙特卡羅迭代求解法的一種啓發式隨機搜索過程。退火過程由冷卻進度表(Cooling Schedule)控制,包括控制參數的初值t及其衰減因子Δt、每個t值時的迭代次數L和停止條件S。

總結

1、題目:平衡點問題:https://www.luogu.org/problem/P1337  ——後面用模擬退火思路分析。

輸入格式:文件的第一行爲一個正整數n(1≤n≤1000),表示重物和洞的數目。接下來的n行,每行是3個整數:Xi.Yi.Wi,分別表示第i個洞的座標以及第 i個重物的重量。(-10000≤x,y≤10000, 0<w≤1000 )

2、結合參考文獻1中代碼分析,代碼初始值選 t=3000,其實是有問題的?如果輸入 都大於3000,是否可以呢?引出如下:

主要問題

問:模擬退火變量是由大變小,那麼和具體題目中的隨機數變化是什麼關係?

答:這是在判斷轉移條件時使用,3種情況。

case 1,如果目標函數變小了,那麼接受變量。

case 2,如果目標函數相等或者變大了,那麼就不接受新變量了嗎?答案是以一定概率接受新變量。如何確定這個概率呢?就要T,dE以及隨機數了。實際上是P(dE)的應用。

case 3,case 2 沒能接受,就要對T進行縮小。一般T乘以0.9500到0.9999之間的一個數。

模擬退火的思想就體現在,不斷選擇新變量,然後重複判斷case 1,2,3,這個過程中,T是變小的,P(dE)也是不斷變小的。但目標函數是不斷接近最優值的。而第2種判斷也可能使目標函數達到全局最優,否則就不必要進行case 2判斷,而直接進入case 3了!

 

參考文獻:

1. https://www.luogu.org/problemnew/solution/P1337 之“模擬退火學習筆記”,——代碼可用-Dev C++

2.https://blog.csdn.net/qq997843911/article/details/83445318 原鏈接 http://dingby.site/2018/04/07/%E6%9C%80%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E2%80%94%E2%80%94%E5%B8%B8%E8%A7%81%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95%E5%88%86%E7%B1%BB%E5%8F%8A%E6%80%BB%E7%BB%93/

3.https://www.cnblogs.com/ranjiewen/p/6084052.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章