首先,這不是關於溫度迭代計數或自動優化調度的問題。這就是數據大小如何與冪運算的縮放關係。SA中的溫度標度
我使用的經典公式:
if(delta < 0 || exp(-delta/tK) > random()) { // new state }
輸入到EXP功能是負的,因爲增量/ TK是正的,所以EXP結果總是小於1,隨機函數也返回一個值在0到1範圍內。
我的測試數據是在1至20範圍內,和所述增量值是低於20。我挑選一個開始溫度等於系統的初始計算溫度和線性斜坡下降到1.
爲了爲了讓SA工作,我必須調整tK。工作版本使用:
exp(-delta/(tK * .001)) > random()
那麼tK的大小與δ的大小有什麼關係?我通過反覆試驗發現了比例因子,我不明白爲什麼需要它。就我的理解而言,只要delta> tK,步長和迭代次數合理,它就可以工作。在我的測試案例中,如果省去額外的秤,系統的溫度不會降低。
我看過的各種在線資源都沒有提到使用真實數據。有時候他們把波爾茲曼常數作爲一個量表,但是因爲我沒有模擬一個沒有幫助的物理粒子系統。示例(通常使用僞代碼)使用100或1000000的值。
那麼我錯過了什麼?正在擴大我必須通過反覆試驗設定的另一個價值嗎?這是因爲我不想讓這個測試用例運行,我想了解這個算法,而魔術常量意味着我不知道發生了什麼。