跳转至

常用更新算法

Monte Carlo 更新算法的目标有两个:保证目标分布正确,并尽量减少自关联时间。不同算法的差别主要在于 proposal 如何构造,以及一次更新能改变多大尺度的构型。

Metropolis

Metropolis 是最基础的局域更新。先提出一个候选构型 \(s'\),再按

\[ P_{\rm acc}(s\to s') = \min\left(1,\frac{W(s')A(s'\to s)}{W(s)A(s\to s')}\right) \]

接受或拒绝。若 proposal 对称,则只需要权重比 \(W(s')/W(s)\)

优点是通用、简单、容易实现。缺点是临界点附近会出现临界慢化,局域更新需要很久才能改变大尺度结构。

Heat Bath

heat bath 更新不只是提出一个候选构型,而是直接从局域条件分布中抽样。例如固定其他自由度后,对单个变量 \(s_i\) 使用

\[ P(s_i|\{s_{j\ne i}\}) = \frac{W(s_i,\{s_{j\ne i}\})} {\sum_{s_i'}W(s_i',\{s_{j\ne i}\})}. \]

这样局域变量总是被接受。它常用于自旋模型、格点场论和离散变量模型中。相比 Metropolis,heat bath 通常减少拒绝率,但仍然是局域更新。

Cluster 更新

cluster 更新的思想是一次翻转一整块强关联自由度,而不是一个点。典型例子包括 Swendsen-Wang 和 Wolff 算法。

以 ferromagnetic Ising 模型为例,相同方向的相邻自旋可以按概率

\[ p=1-e^{-2K} \]

连成 cluster,然后整体翻转。这样可以在临界点附近快速改变大尺度磁畴,显著减小动态临界指数。

cluster 算法的核心是引入几何表象:把原本的自旋构型转化为自旋与 bond 的联合构型,使大尺度关联能够被一次更新处理。

Loop 更新

loop 更新常见于量子 Monte Carlo 和几何表象中。它把构型分解成闭合 loop,然后翻转或重连整条 loop。与 cluster 类似,loop 更新也是非局域更新,但更适合世界线、顶点模型、量子自旋模型等具有约束结构的问题。

loop 更新的优点是能保持局域约束,同时改变长距离结构。难点是需要为具体模型设计合适的图形规则。

Worm 更新

worm 算法通过临时引入两个缺陷,把原本只在配分函数空间 \(\mathcal Z\) 中的闭合构型,扩展到

\[ \mathcal Z_w=\mathcal Z+\omega_G\mathcal G. \]

在格林函数空间 \(\mathcal G\) 中,两个 worm head 可以移动、产生或删除 kink,从而高效改变世界线拓扑。回到 \(\mathcal Z\) 空间后得到新的物理构型。

worm 算法特别适合测量格林函数、处理粒子数涨落、更新世界线构型和降低拓扑障碍。

Lifted 思想

lifted 或 event-chain 类算法通过扩展状态空间,引入额外方向、动量或事件变量,让 Markov chain 更少做随机回头路。它通常不满足传统 detailed balance,而满足更一般的 global balance。

直觉上,普通随机游走频繁来回抖动;lifted 更新则让构型在某个方向上持续移动,直到触发事件再改变方向。这类方法在连续变量系统、硬球模型和一些自旋模型中能显著降低自关联。

选择算法的标准

实际选择更新算法时,可以按下面顺序判断:

  • 如果只是验证模型或写基准程序,先用 Metropolis。
  • 如果局域条件分布容易抽样,可以尝试 heat bath。
  • 如果临界慢化严重,优先考虑 cluster 或 loop。
  • 如果构型是世界线或需要测格林函数,考虑 worm。
  • 如果拒绝率高或随机游走慢,可以研究 lifted 或 rejection-free 方法。

无论算法多复杂,最终都要回到同一件事:目标分布是否正确,自关联时间是否足够短。