模擬退火學習(2)

2021-07-14 16:28:28 字數 638 閱讀 1818

在上次的模擬退火學習(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 題的呢?模擬退火,即模擬金屬退火這一過程,來實現最優解的尋找。金屬退火,對於我們似乎很遙遠了,那我們舉個實際點的例子吧。學過化學的都知道,在蒸發結晶時,我們會在蒸發皿還有部分溶劑時停止加熱,用餘熱蒸乾剩餘液體。這就是乙個退火過程,它的實質就是...