跳转至

Clock 算法

考虑两种简单情况:

  • 放键:集团算法加键过程

  • 接受:Metropolis因子化之后进行判断的过程

两个格点之间的放键(接受)的概率记为 \(p_{ij}^B\) (\(p_{ij}^A\)). 注意,放键是:如果给了最大的放键概率 \(\hat{p}_{ij}^B\) 都不放,即 \(p_{ij}^B \leq \hat{p}_{ij}^B\),那么其他概率的情况也不会放(接受是:如果给了最小的接受概率 \(\hat{p}_{ij}^A\) 都接受,\(p_{ij}^A \geq \hat{p}_{ij}^A\),那么其他概率的情况肯定接受)

具体做法是将原本的构型依赖的概率:

\[p_{ij}\]

拆成两步,第一步不依赖构型,第二步依赖构型:

\[\hat{p}_{ij} \cdot \frac{p_{ij}}{\hat{p}_{ij}}\]

注意到,第一步在不发生(发生)时,不会触发第二步,因此可以利用累计概率加速抽样过程,即从问第一步是否发生变为抽多少次样之后第一步发生(不发生),这时候获得了抽多少次样的信息就是加速的效果,然后由于触发了第二步的条件,再去判断第二步,这时就要访问构型了。

对于 \(\hat{p}_{ij}\) 越小(越大),其加速效果越好!

总结一下:

  • 将N-1个长程相互作用因子化,从而可以分开进行采样,这一步对于集团算法是天然的,对于Metropolis要进行划分

  • 提出不依赖构型的概率方案,是取最大还是取最小?能否保证正确?(难,lattice系统得益于spin的取值为 \([-1,1]\) 是有界的,方便设计)

  • 利用累计概率进行加速