基於隨機化的非確定性演算法 模擬退火學習筆記

2021-07-05 01:37:30 字數 875 閱讀 8024

暑假zky學長講了模擬退火,現在正式來更一發學習筆記.

這次不口胡直接正文!

—————————————– > w < 線 割 分 是 我 —————————————————

模擬退火(simulated annealing,簡稱sa)是一種通用概率演算法,用來在乙個大的搜尋空間內找尋命題的最優解。

這是小學生百科給的定義.

然後後面扯了一大堆什麼和冶金學相關…

我覺得小學生百科說的東西都並沒有什麼卵用…

一句話概括:其實模擬退火就是隨機化的貪心.

有一種貪心演算法叫爬山演算法.

我們把答案數值的分布畫出影象,可以看出是連綿不斷的山峰的形狀.

爬山演算法就是在乙個點單純的選擇兩邊的某個更優解,然後直到走到乙個山峰.

很顯然這樣會陷入區域性最優解而得不到全域性最優解.

那麼模擬退火就借助隨機化的手段,每次我們面臨更優解和較劣解的選擇時並不會直接選擇最優解,而是會以一定概率來接受那個較劣解,這樣就可以跳出區域性最優解而訪問到全域性最優解.

這個概率在模擬退火中叫做「溫度」.就像冶金一樣,這個概率隨著演算法的執行是不斷降低的.大概是隨著演算法的執行每次乘乙個rate(通常是0.99,0.98,0.97…).

寫模擬退火的時候最痛苦的就是調這個rate(據說)

演算法的初始溫度設定應當足夠大.

需要注意的是:對於新產生的解,如果它更優,那麼演算法是一定接受這個解的,只是對於較劣解才會使用概率.

最後當這個概率小於一定值,我們就退出演算法,認為當前解就是最優解.

泥問我這東西的正確性和複雜度?

我都不知道啊qaq

非確定性演算法 詳解 Flink 實時應用的確定性

確定性 determinism 是電腦科學中十分重要的特性,確定性的演算法保證對於給定相同的輸入總是產生相同的輸出。在分布式實時計算領域,確定性是業界一直難以解決的課題,由此導致用離線計算修正實時計算結果的 lambda 架構成為大資料領域過去近十年的主流架構。而在最近幾年隨著 google the...

演算法導論 隨機化的快速排序

public void random quicksort int array,int left,int right public int random position int array,int left,int right param array 待排序的陣列 param left 左邊界 pa...

經典演算法 快速排序的隨機化版本

一般的快速排序,在最壞的情況下時間複雜度為n2,這在輸入資料有序的情況下會出現,我們應該盡量去避免它。採取的策略是,在選擇分割點的時候,不再選擇第乙個點或者最後乙個點,而是隨機選擇乙個點,然後將它與第乙個點互換。include includeusing namespace std int parti...