netket.variational.MCState

class netket.variational.MCState(sampler, model=None, *, n_samples=1000, n_discard=None, variables=None, init_fun=None, apply_fun=None, sample_fun=None, seed=None, sampler_seed=None, mutable=False, training_kwargs={})[source]

Bases: netket.variational.base.VariationalState

Variational State for a Variational Neural Quantum State.

The state is sampled according to the provided sampler.

__init__(sampler, model=None, *, n_samples=1000, n_discard=None, variables=None, init_fun=None, apply_fun=None, sample_fun=None, seed=None, sampler_seed=None, mutable=False, training_kwargs={})[source]

Constructs the MCState.

Parameters
  • sampler (Sampler) – The sampler

  • model – (Optional) The model. If not provided, you must provide init_fun and apply_fun.

  • n_samples (int) –

  • n_discard (Optional[int]) –

  • variables (Optional[Any]) –

  • init_fun (Optional[Callable[[Any, Sequence[int], Any], Any]]) –

  • apply_fun (Optional[Callable]) –

  • sample_fun (Optional[Callable]) –

  • seed (Optional[Union[int, Any]]) –

  • sampler_seed (Optional[Union[int, Any]]) –

  • mutable (bool) –

  • training_kwargs (Dict) –

Keyword Arguments
  • n_samples – the total number of samples across chains and processes when sampling (default=1000).

  • n_discard – number of discarded samples at the beginning of each monte-carlo chain (default=n_samples/10).

  • parameters – Optional PyTree of weights from which to start.

  • seed – rng seed used to generate a set of parameters (only if parameters is not passed). Defaults to a random one.

  • sampler_seed – rng seed used to initialise the sampler. Defaults to a random one.

  • mutable – Dict specifing mutable arguments. Use it to specify if the model has a state that can change during evaluation, but that should not be optimised. See also flax.linen.module.apply documentation (default=False)

  • init_fun – Function of the signature f(model, shape, rng_key, dtype) -> Optional_state, parameters used to initialise the parameters. Defaults to the standard flax initialiser. Only specify if your network has a non-standard init method.

  • apply_fun – Function of the signature f(model, variables, σ) that should evaluate the model. Defafults to model.apply(variables, σ). specify only if your network has a non-standard apply method.

  • training_kwargs – a dict containing the optionaal keyword arguments to be passed to the apply_fun during training. Useful for example when you have a batchnorm layer that constructs the average/mean only during training.

Attributes
chain_length

Length of the markov chain used for sampling configurations.

If running under MPI, the total samples will be n_nodes * chain_length * n_batches.

Return type

int

hilbert

The descriptor of the Hilbert space on which this variational state is defined.

Return type

AbstractHilbert

model_state: Optional[Any]

An Optional PyTree encoding a mutable state of the model that is not trained.

Return type

Optional[Any]

n_discard

Number of discarded samples at the beginning of the markov chain.

Return type

int

n_parameters

The total number of parameters in the model.

Return type

int

n_samples

The total number of samples generated at every sampling step.

Return type

int

parameters

The pytree of the parameters of the model.

Return type

Any

sampler

The Monte Carlo sampler used by this Monte Carlo variational state.

Return type

Sampler

samples

Returns the set of cached samples.

The samples returnede are guaranteed valid for the current state of the variational state. If no cached parameters are available, then they are sampled first and then cached.

To obtain a new set of samples either use reset or sample.

Return type

ndarray

variables

The PyTreee containing the paramters and state of the model, used when evaluating it.

Return type

Any

Methods
evaluate(σ)[source]

DEPRECATED: use log_value instead.

Return type

ndarray

Parameters

σ (jax._src.numpy.lax_numpy.ndarray) –

expect(Ô)[source]
Estimates the quantum expectation value for a given operator O.

In the case of a pure state $psi$, this is $<O>= <Psi|O|Psi>/<Psi|Psi>$ otherwise for a mixed state $rho$, this is $<O> = Tr[rho hat{O}/Tr[rho]$.

Parameters
  • – the operator O.

  • Ô (netket.operator._abstract_operator.AbstractOperator) –

Return type

Stats

Returns

An estimation of the quantum expectation value <O>.

expect_and_grad(Ô, *, mutable=None, is_hermitian=None)[source]

Estimates both the gradient of the quantum expectation value of a given operator O.

Parameters
  • – the operator Ô for which we compute the expectation value and it’s gradient

  • mutable – Can be bool, str, or list. Specifies which collections in the model_state should be treated as mutable: bool: all/no collections are mutable. str: The name of a single mutable collection. list: A list of names of mutable collections. This is used to mutate the state of the model while you train it (for example to implement BatchNorm. Consult Flax’s Module.apply documentation for a more in-depth exaplanation).

  • is_hermitian – optional override for whever to use or not the hermitian logic. By default it’s automatically detected.

  • Ô (netket.operator._abstract_operator.AbstractOperator) –

Return type

Tuple[Stats, Any]

Returns

An estimation of the quantum expectation value <O>. An estimation of the average gradient of the quantum expectation value <O>.

grad(Ô, *, is_hermitian=None, mutable=None)

Estimates the gradient of the quantum expectation value of a given operator O.

Parameters
  • op (netket.operator.AbstractOperator) – the operator O.

  • is_hermitian (Optional[bool]) – optional override for whever to use or not the hermitian logic. By default it’s automatically detected.

  • mutable (Optional[Any]) –

Returns

An estimation of the average gradient of the quantum expectation value <O>.

Return type

array

init(seed=None, dtype=None)[source]

Initialises the variational parameters of the variational state.

init_parameters(init_fun=None, *, seed=None)

Re-initializes all the parameters with the provided initialization function, defaulting to the normal distribution of standard deviation 0.01.

Warning

The init function will not change the dtype of the parameters, which is determined by the model. DO NOT SPECIFY IT INSIDE THE INIT FUNCTION

Parameters
  • init_fun (Optional[Callable[[Any, Sequence[int], Any], Any]]) – a jax initializer such as netket.nn.initializers.normal. Must be a Callable taking 3 inputs, the jax PRNG key, the shape and the dtype, and outputting an array with the valid dtype and shape. If left unspecified, defaults to netket.nn.initializers.normal(stddev=0.01)

  • seed (Optional[Any]) – Optional seed to be used. The seed is synced across all MPI processes. If unspecified, uses a random seed.

log_value(σ)[source]

Evaluate the variational state for a batch of states and returns the logarithm of the amplitude of the quantum state. For pure states, this is \(log(<σ|ψ>)\), whereas for mixed states this is \(log(<σr|ρ|σc>)\), where ψ and ρ are respectively a pure state (wavefunction) and a mixed state (density matrix). For the density matrix, the left and right-acting states (row and column) are obtained as σr=σ[::,0:N] and σc=σ[::,N:].

Given a batch of inputs (Nb, N), returns a batch of outputs (Nb,).

Return type

ndarray

Parameters

σ (jax._src.numpy.lax_numpy.ndarray) –

quantum_geometric_tensor(sr)[source]

Computes an estimate of the quantum geometric tensor G_ij. This function returns a linear operator that can be used to apply G_ij to a given vector or can be converted to a full matrix.

Returns

A linear operator representing the quantum geometric tensor.

Return type

scipy.sparse.linalg.LinearOperator

Parameters

sr (netket.optimizer.sr.api.SR) –

reset()[source]

Resets the sampled states. This method is called automatically every time that the parameters/state is updated.

sample(*, chain_length=None, n_samples=None, n_discard=None)[source]

Sample a certain number of configurations.

If one among chain_leength or n_samples is defined, that number of samples are gen erated. Otherwise the value set internally is used.

Parameters
  • chain_length (Optional[int]) – The length of the markov chains.

  • n_samples (Optional[int]) – The total number of samples across all MPI ranks.

  • n_discard (Optional[int]) – Number of discarded samples at the beginning of the markov chain.

Return type

ndarray

to_array(normalize=True)[source]

Returns the dense-vector representation of this state.

Parameters

normalize (bool) – If True, the vector is normalized to have L2-norm 1.

Return type

ndarray

Returns

An exponentially large vector representing the state in the computational basis.