計算與實驗物理

梅特羅波利斯演算法(Metropolis algorithm)

/ meh-TROP-oh-liss /

在統計力學中,你希望以正比於波茲曼權重的方式抽取系統的組態,讓熱力學上可能的狀態經常出現、不可能的狀態很少出現。麻煩在於這個權重是 exp(-E / kT) 除以配分函數 Z,而 Z 是對數量天文般龐大的狀態求和,你根本算不出來。梅特羅波利斯演算法是漂亮的脫身之道:它在組態空間中構造一條有嚮導的隨機漫步,讓每個狀態被造訪的頻率恰好等於它的機率所要求的,而且完全不需要知道 Z。

作法是一個迴圈。從目前的組態出發,提議一個小的隨機更動(翻轉一個自旋、輕推一個粒子),並算出隨之而來的能量變化 delta E。若 delta E <= 0,這步降低能量,你總是接受。若 delta E > 0,你只以機率 exp(-delta E / kT) 接受它,否則保留舊組態並再計一次。反覆下去會產生一條馬可夫鏈,其穩態分布恰好是波茲曼分布,因為這個接受規則滿足細緻平衡。關鍵的魔法在於:只有機率的比值透過 delta E 進入,於是那個算不出的歸一化常數 Z 被消掉,永遠不必計算。

這是極其廣泛的模擬背後的引擎:易辛模型、晶格場論與晶格量子色動力學,以及在更廣的梅特羅波利斯-黑斯廷斯形式下、遍及各科學領域的貝氏推論。誠實的警告是相繼的樣本彼此相關,因為這是一條漫步而非一組獨立抽取;你必須丟棄初始的「熱身」(burn-in)期,並對鏈做稀疏化以取得近乎獨立的樣本。更糟的是,在臨界點附近自相關時間會發散(臨界慢化),漫步會令人抓狂地緩慢爬過組態空間。

要模擬溫度 T 下的二維易辛磁鐵,就反覆隨機挑一個自旋、算出翻轉它的能量代價、依梅特羅波利斯規則接受或拒絕,待系統達到平衡後對磁化量取平均;讓 T 掃過臨界點,就能重現鐵磁相變。

一次翻轉一個自旋來抽樣波茲曼分布,全程不必計算 Z。

梅特羅波利斯樣本彼此相關、且只在漸近意義下服從波茲曼分布,所以熱身與稀疏化很重要;配分函數之所以能被消去,正是因為接受規則只依賴能量差,從不依賴絕對機率。

又稱
Metropolis-Hastings algorithmMarkov-chain Monte CarloMCMC梅特羅波利斯-黑斯廷斯演算法馬可夫鏈蒙地卡羅