# netket.sampler.MetropolisLocal¶

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.

Parameters
• 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).

Examples

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)
100


Methods

 __init__(machine[, n_chains, sweep_size, …]) Constructs a new MetropolisLocal sampler given a machine. generate_samples(n_samples[, init_random, …]) reset([init_random]) samples(n_max[, init_random])

Attributes

 machine_func