在上次的模擬退火學習(1)中筆者提出了兩個問題:1>時間問題 2>結果不穩定問題
1.就是時間問題,考慮到精度和時間的兩個因素,綜合考慮設定模擬退火的初始引數值如下所示
int markovlength = 1000; // 馬可夫鏈長度
double stepfactor = 0.02; // 步長因子
double temperature = 1000; // 初始溫度
解決五引數擬合公式中採用模擬退火問題的初始值設定為上圖所示:溫度的衰減係數為0.98,按照如上所示的初始值,能夠將擬合時間控制在10s左右。
2.就是擬合結果不固定問題,最後發現是隨機數的選取問題
隨機數double rnd()
本文模擬退火產生的隨機數如上所示
隨機數的種子採用時間產生,函式如下所示:
srand((unsigned)time(null));
由於本文採用多執行緒進行擬合,所以在每個函式中都呼叫了上訴的隨機數種子,最後筆者在建立執行緒之前就使用一次隨機數種子,發現結果基本穩定。
所以如果所有的函式都要使用到rand函式,只需要在先執行的函式使用一次srand即可 。
好了,今天就寫這麼多,去上課了
模擬退火學習筆記
博主這個暴力騙分選手get到了 人生的本質 有一類函式,我們要求其的最低點 最高點 二分?三分?四五六七 分?哦涼涼了 先介紹乙個爬山 我們隨機撒點,然後讓這些點去做類似現實的爬山 即右邊優就去右邊,左邊優就去左邊 直到沒有比他更優秀的了!也就是相當於到山峰了吧 那麼這個貪心的演算法顯然非常容易卡在...
模擬退火學習筆記
網上的絕大部分部落格,包括洛谷題解原來都是錯的寫法 具體看轉移部分qwq 終於成為了少數派,這是好的 模擬退火演算法 simulate anneal,sa 是一種通用概率演演算法,用來在乙個大的搜尋空間內找尋命題的最優解。模擬退火是由s.kirkpatrick,c.d.gelatt和m.p.vecc...
學習筆記 模擬退火
一談到模擬退火,大家都知道是玄學演算法,但是他是如何 a 題的呢?模擬退火,即模擬金屬退火這一過程,來實現最優解的尋找。金屬退火,對於我們似乎很遙遠了,那我們舉個實際點的例子吧。學過化學的都知道,在蒸發結晶時,我們會在蒸發皿還有部分溶劑時停止加熱,用餘熱蒸乾剩餘液體。這就是乙個退火過程,它的實質就是...