我们在文章的最后再涉及一些关键的代码解释。本篇文章叙述部分大量参考了最后列出的参考文献,因此不做一一引用.
建议食用顺序: 哈密顿量→对角更新→Loop的构造过程→热浴解→code
掌握顺序:知道一个哈密顿量怎么拆分成每种权重→解一下热浴解→写完对角更新与Loop更新
环算法(Loop algorithms)在世界线(world-line)量子蒙特卡罗计算中的应用及其在解决特定问题上的局限性。首先,环算法显著提高了世界线量子蒙特卡罗计算的性能,可以将自相关时间减少几个数量级,但传统环更新(conventional loop updates)受限于特定模型和参数空间. 特别是,在构建环的时候无法考虑外部场,并且环的翻转取决于Metropolis接受/拒绝步骤。在高场下,大环的接受概率很小,因此此方法仅在高温或非常弱的场下可行.
最近的蠕虫算法(worm algorithm)和SSE算符-环算法(operator-loop algorithm for stochastic series expansion (SSE))的泛化克服了这个问题,允许环自相交(selfintersect)(我也不太知道这个翻译准不准)和回溯(backtrack),从而考虑了复杂的相互作用和外部场。
为引入有向圈算法,我们考虑一个简单的哈密顿量,XXZ model加一个纵场.
$$ H =\sum_{\langle i,j\rangle}\left[ \frac{1}{2}(S^+_i S^-_j + S^-_i S^+_j) + \Delta S^z_i S^z_j \right] - \sum_i hS^z_i $$
其中参数 $\Delta$ 可以调控, $\Delta =\frac{J^{z}}{J^{x,y}}$, 取大的极限退为Ising model,取小的极限退为XY model. 在$C=1/4,\Delta =1,h = 0$ 模型简化为标准的$S=1/2$ Heisenberg模型。 依旧的,对哈密顿量拆成对角项和非对角项进行处理:
$$ H_{1,b} = C-\Delta S^z_iS^z_j+h_b(S^z_i+S^z_j)\\H_{2,b} = \frac{1}{2}(S^+_iS^-_j+S^-_iS^+_j) $$
注意,与零外场不同的是,我们在对角项中加入了纵场项,并且将纵场“分”到了两个格点上,可以理解为 $i$ 格点和 $j$ 格点现在要各自贡献 $h/2$ 的纵场项,在这里,也就是 $h_b = h/2$.
算一下能量平移项,这关系到我们最后如何获得正确的能量:
$$ \langle H \rangle \sim -\beta^{-1} \langle n_h \rangle \ so, \langle NE_{av} \rangle \sim -\beta^{-1} \langle n_h \rangle\\ \to \langle E_{av} \rangle \sim -\beta^{-1} \langle n_h \rangle/N $$