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
