  Monte Carlo simulations are methods for simulating statistical systems. The
aim is to generate a representative ensemble of configurations to access
thermodynamical quantities without the need to solve the system analytically or
to perform an exact enumeration. The main principles of Monte Carlo simulations
are ergodicity and detailed balance. The Ising model is a lattice spin system
with nearest neighbor interactions that is appropriate to illustrate different
examples of Monte Carlo simulations. It displays a second order phase
transition between a disordered (high temperature) and ordered (low
temperature) phases, leading to different strategies of simulations. The
Metropolis algorithm and the Glauber dynamics are efficient at high
temperature. Close to the critical temperature, where the spins display long
range correlations, cluster algorithms are more efficient. We introduce the
rejection free (or continuous time) algorithm and describe in details an
interesting alternative representation of the Ising model using graphs instead
of spins with the Worm algorithm. We conclude with an important discussion of
the dynamical effects such as thermalization and correlation time.

Statistical Mechanics