# Diffusion Monte Carlo

Diffusion Monte Carlo (DMC) or diffusion quantum Monte Carlo is a quantum Monte Carlo method that uses a Green's function to calculate low-lying energies of a quantum many-body Hamiltonian.

## Introduction and motivation of the algorithm

Diffusion Monte Carlo has the potential to be numerically exact, meaning that it can find the exact ground state energy for any quantum system within a given error, but approximations must often be made and their impact must be assessed in particular cases. When actually attempting the calculation, one finds that for bosons, the algorithm scales as a polynomial with the system size, but for fermions, DMC scales exponentially with the system size. This makes exact large-scale DMC simulations for fermions impossible; however, DMC employing a clever approximation known as the fixed-node approximation can still yield very accurate results.
To motivate the algorithm, let's look at the Schrödinger equation for a particle in some potential in one dimension:
    $i{\frac {\partial \Psi (x,t)}{\partial t}}=-{\frac {1}{2}}{\frac {\partial ^{2}\Psi (x,t)}{\partial x^{2}}}+V(x)\Psi (x,t).$
We can condense the notation a bit by writing it in terms of an operator equation, with
    $H=-{\frac {1}{2}}{\frac {\partial ^{2}}{\partial x^{2}}}+V(x)$
where $H$ is the Hamiltonian operator. So then we have
    $i{\frac {\partial \Psi (x,t)}{\partial t}}=H\Psi (x,t),$
where we have to keep in mind that $H$ is an operator, not a simple number or function. There are special functions, called eigenfunctions, for which $H\Psi (x)=E\Psi (x)$, where $E$ is a number. These functions are special because no matter where we evaluate the action of the $H$ operator on the wave function, we always get the same number $E$. These functions are called stationary states, because the time derivative at any point $x$ is always the same, so the amplitude of the wave function never changes in time. Since the overall phase of a wave function is not measurable, the system does not change in time.
We are usually interested in the wave function with the lowest energy eigenvalue, the ground state. We're going to write a slightly different version of the Schrödinger equation that will have the same energy eigenvalue, but, instead of being oscillatory, it will be convergent. Here it is:
    $-{\frac {\partial \Psi (x,t)}{\partial t}}=(H-E_{0})\Psi (x,t)$.
We've removed the imaginary number from the time derivative and added in a constant offset of $E_{0}$, which is the ground state energy. We don't actually know the ground state energy, but there will be a way to determine it self-consistently which we'll introduce later. Our modified equation (some people call it the imaginary-time Schrödinger equation) has some nice properties. The first thing to notice is that if we happen to guess the ground state wave function, then $H\Phi _{0}(x)=E_{0}\Phi _{0}(x)$ and the time derivative is zero. Now suppose that we start with another wave function($\Psi$), which is not the ground state but is not orthogonal to it. Then we can write it as a linear sum of eigenfunctions:
    $\Psi =c_{0}\Phi _{0}+\sum _{i=1}^{\infty }c_{i}\Phi _{i}$
Since this is a linear differential equation, we can look at the action of each part separately. We already determined that $\Phi _{0}$ is stationary. Suppose we take $\Phi _{1}$. Since $\Phi _{0}$ is the lowest-energy eigenfunction, the associate eigenvalue of $\Phi _{1}$ satisfies the property $E_{1}>E_{0}$. Thus the time derivative of $c_{1}$ is negative, and will eventually go to zero, leaving us with only the ground state. This observation also gives us a way to determine $E_{0}$. We watch the amplitude of the wave function as we propagate through time. If it increases, then decrease the estimation of the offset energy. If the amplitude decreases, then increase the estimate of the offset energy.

## Stochastic implementation and the Green's function

Now we have an equation that, as we propagate it forward in time and adjust $E_{0}$ appropriately, we find the ground state of any given Hamiltonian. This is still a harder problem than classical mechanics, though, because instead of propagating single positions of particles, we must propagate entire functions. In classical mechanics, we could simulate the motion of the particles by setting $x(t+\tau )=x(t)+\tau v(t)+0.5F(t)\tau ^{2}$, if we assume that the force is constant over the time span of $\tau$. For the imaginary time Schrödinger equation, instead, we propagate forward in time using a convolution integral with a special function called a Green's function. So we get $\Psi (x,t+\tau )=\int G(x,x',\tau )\Psi (x',t)dx'$. Similarly to classical mechanics, we can only propagate for small slices of time; otherwise the Green's function is inaccurate. As the number of particles increases, the dimensionality of the integral increases as well, since we have to integrate over all coordinates of all particles. We can do these integrals by Monte Carlo integration.