Stochastic Series Expansion (SSE) Monte Carlo
Theory: SSE is a finite-temperature, discrete-time technique that works well for quantum spin problems (e.g. Heisenberg model) and other lattice Hamiltonians in any number of dimensions. The method works by expanding the partition function in a Taylor series
$$\tag{1} Z = \mathrm{Tr}[ \rho] = \mathrm{Tr}[e^{-\beta H}] = \mathrm{Tr} \sum \limits_{\alpha_0} \sum \limits_{n=0}^\infty \left\langle \alpha_0 \left| \frac{(-\beta H)^n}{n!} \right| \alpha_0 \right\rangle $$
and then inserting a complete set of states in some basis between each term in the Taylor expansion
$$\tag{2} Z = \sum \limits_n \frac{(-\beta)^n}{n!} \sum \limits_{\alpha_0} \sum \limits_{\alpha_1} ... \sum \limits_{\alpha_{n-1}} \langle \alpha_0 | H | \alpha_1 \rangle \langle \alpha_1 | H | \alpha_2 \rangle ... \langle \alpha_{n-1} | H | \alpha_0 \rangle $$
The resulting matrix elements $\langle \alpha_{i} | H | \alpha_{i+1} \rangle$ are usually simple to evaluate.
Algorithm: The goal of the algorithm is to sample the sum in the previous equation. This is sum in an extremely high-dimensional space, perfect for importance sampling Monte Carlo. In general, the program stores a MC configuration as a starting state $\alpha_0$ and the list of local operators that act upon that state (the operator string). There are many different methods of updates, but they generally consist of two steps:
- A diagonal update that adds and removes diagonal matrix elements, sampling the order ($n$) of the Taylor expansion.
- An off-diagonal update which leaves $n$ fixed and samples the configurations $\{\alpha\}$. These are commonly called operator loop updates and there are many different algorithms for different situations.
Use case: SSE is efficient for lattice Hamiltonians at finite temperature (although $T=0$ can be reached as a limit). To measure any quantity that is diagonal in the working basis is each, since the measurements can be directly computed from the SSE configurations, e.g.
$$\tag{3} \langle S^z \rangle = \mathrm{Tr} \left[ S^z e^{-\beta H} \right] $$
If an observable is off-diagonal in the simulation basis, but appears in the Hamiltonian, it can sometimes be calculated using some clever formula, e.g.
$$\tag{4} \langle E \rangle = -\frac{\langle n \rangle }{\beta}$$
$$\tag{5} \langle C_v \rangle = -\frac{\langle n(n-1) \rangle }{\beta } $$
Computing arbitrary off-diagonal observables often requires complicated secondary sampling procedures.
References The main source for learning about SSE is this big review article by Sandvik: arXiv:1101.3281. There is also an excellent recorded lecture by Roger Melko from the 2010 Boulder Summer School (the link to the videos is right below the title).