class netket.sampler.MetropolisLocal(machine, n_chains=16, sweep_size=None, batch_size=None)[source]

Sampler acting on one local degree of freedom.

This sampler acts locally only on one local degree of freedom \(s_i\), and proposes a new state: \(s_1 \dots s^\prime_i \dots s_N\), where \(s^\prime_i \neq s_i\).

The transition probability associated to this sampler can be decomposed into two steps:

1. One of the site indices \(i = 1\dots N\) is chosen with uniform probability. 2. Among all the possible (\(m\)) values that \(s_i\) can take, one of them is chosen with uniform probability.

For example, in the case of spin \(1/2\) particles, \(m=2\) and the possible local values are \(s_i = -1,+1\). In this case then MetropolisLocal is equivalent to flipping a random spin.

In the case of bosons, with occupation numbers \(s_i = 0, 1, \dots n_{\mathrm{max}}\), MetropolisLocal would pick a random local occupation number uniformly between \(0\) and \(n_{\mathrm{max}}\).

__init__(machine, n_chains=16, sweep_size=None, batch_size=None)[source]

Constructs a new MetropolisLocal sampler given a machine.

  • machine – A machine \(\Psi(s)\) used for the sampling. The probability distribution being sampled from is \(F(\Psi(s))\), where the function \(F(X)\), is arbitrary, by default \(F(X)=|X|^2\).

  • n_chains – The number of Markov Chain to be run in parallel on a single process.

  • sweep_size – The number of exchanges that compose a single sweep. If None, sweep_size is equal to the number of degrees of freedom (n_visible).

  • batch_size – The batch size to be used when calling log_val on the given Machine. If None, batch_size is equal to the number Markov chains (n_chains).


Sampling from a RBM machine in a 1D lattice of spin 1/2

>>> import netket as nk
>>> g=nk.graph.Hypercube(length=10,n_dim=2,pbc=True)
>>> hi=nk.hilbert.Spin(s=0.5,graph=g)
>>> # RBM Spin Machine
>>> ma = nk.machine.RbmSpin(alpha=1, hilbert=hi)
>>> # Construct a MetropolisLocal Sampler
>>> sa = nk.sampler.MetropolisLocal(machine=ma)
>>> print(sa.machine.hilbert.size)


__init__(machine[, n_chains, sweep_size, …])

Constructs a new MetropolisLocal sampler given a machine.

generate_samples(n_samples[, init_random, …])


samples(n_max[, init_random])