模擬退火算法SA參數設置實驗記錄

模擬退火算法有4個參數

N:每個溫度迭代次數

T:重複降溫次數

a:降溫係數

t0:初始溫度

本文用一個50個城市的TSP問題數據集,用交叉對比的方法調參。一組參數運行200次取平均。

首先調初始溫度

N=1000,T=1000,a=0.99固定



可以看到在初始溫度在1500時平均距離和標準差就幾乎沒有什麼變化了。也就是初始溫度在大於1500以後對結果已經沒有什麼影響。產生這種效果的原因是

模擬退火算法最重要的判斷條件

Math.exp(差值/t)>r(0-1的隨機數)

因爲0-1之間隨機平均下來就是0.5

 

Math.exp-0.69=0.5

也就是說-0.69<  差值/t <0 Math.exp(差值/t>0.5

所以大致可以將模擬退火算法理解成只要  差值的絕對值在t的0.7倍以內就會被採用。因爲溫度t隨着迭代逐漸降低,t*0.7顯然逐漸變得更小,實現了退火。

所以t0*a^N這個值對退火算法最爲重要。

比如 1500*0.99^1000=0.06,0.06*0.7這個冗餘度對計算路徑太小了已經沒什麼意義。

第二步,調節降溫係數

N=1000,T=1000,t0=1500固定


當降溫係數=0.99815時平均距離爲69276最優,這時t0*a^N=235,這道題的最短路徑可能在66221附近,235*0.7/66221=0.002,這個冗餘度相當於最優值的0.2%

第三步調重複降溫次數T

 

N=1000,a=0.99815,t0=1500固定

這組結果很明顯同一個過程重複次數越多性能越好。但T越大速度也越慢,所以T取2500.因爲每個溫度迭代次數=1000固定所以t0*a^N也都是固定的。

第四步調節每個溫度迭代次數N

T=2500,a=0.99815,t0=1500固定



這個很明顯隨着N的變化t0*a^N也顯著變化,結果變差。

所以綜合起來退火算法的四個參數

N:每個溫度迭代次數

T:重複降溫次數

a:降溫係數

t0:初始溫度

T越大性能越優,

N,a,t0這個三個變量是相互制約的,t0*a^N的值是退火算法最爲關鍵的因素。一個大致可以參考的標準是t0*a^N*0.7/理論最優值=0.002

這個測試和蟻羣算法的測試用的數據集是一樣的

雖然退火算法的最好平均值大於蟻羣算法,

但是模擬退火算法的最優值是66221,這個最優值好於蟻羣算法, 而且這個最優值多次出現,表明退火算法更有利於搜索全局最優值。





















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