Custom Sampler, where transition operators are specified by the user. For the moment, this functionality is limited to transition operators which are sums of -local operators:
where the move operators act on an (arbitrary) subset of sites.
The operators are specified giving their matrix elements, and a list of sites on which they act. Each operator must be real, symmetric, positive definite and stochastic (i.e. sum of each column and line is 1).
The transition probability associated to a custom sampler can be decomposed into two steps:
One of the move operators is chosen with a weight given by the user (or uniform probability by default). If the weights are provided, they do not need to sum to unity.
Starting from state , the probability to transition to state is given by .
Constructs a new
CustomSampler given a machine and a list of local
stochastic move (transition) operators.
|machine||netket.machine.Machine||A machine used for the sampling. The probability distribution being sampled from is .|
|move_weights||List[float]=||For each , the probability to pick one of the move operators (must sum to one).|
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 Custom Sampler >>> # Using random local spin flips (Pauli X operator) >>> X = [[0, 1],[1, 0]] >>> move_op = nk.operator.LocalOperator(hilbert=hi,operators=[X] * g.n_sites,acting_on=[[i] for i in range(g.n_sites)]) >>> sa = nk.sampler.CustomSampler(machine=ma, move_operators=move_op)
Resets the state of the sampler, including the acceptance rate statistics and optionally initializing at random the visible units being sampled.
Seeds the random number generator used by the
|base_seed||int||The base seed for the random number generator|
Performs a sampling sweep. Typically a single sweep consists of an extensive number of local moves.
|acceptance||numpy.array||The measured acceptance rate for the sampling. In the case of rejection-free sampling this is always equal to 1.|
|hilbert||netket.hilbert||The Hilbert space used for the sampling.|
|machine||netket.machine||The machine used for the sampling.|
|visible||numpy.array||The quantum numbers being sampled, and distributed according to|