quantax.optimizer.ExactQNGD#
- class quantax.optimizer.ExactQNGD#
Bases:
QNGDExact quantum natural gradient descent, performed by a full summation in the whole Hilbert space.
The key function of the class is
get_step, which provides the update of parameters by solving the quantum natural gradient descent equation \(\bar O \dot \theta = \bar \epsilon\).- __init__(state: Variational, grad: EnergyGrad | OverlapGrad, imag_time: bool = True, solver: Callable[[...], Array] | None = None, symm: Symmetry | None = None)#
- Parameters:
state – Variational state to be optimized.
grad – The gradient source defining \(\bar \epsilon\), e.g.
EnergyGradorOverlapGrad.imag_time – Whether to use imaginary-time evolution, default to True.
solver – The numerical solver for the matrix inverse, default to
auto_pinv_eig.symm – Symmetry used to construct the Hilbert space, default to be the symmetry of the variational state.
- get_Ebar(psi: Array) Array#
Compute \(\bar \epsilon\) of the gradient source in the full Hilbert space.
- property VarE: Array | ndarray | bool | number | bool | int | float | complex | None#
Energy variance \(\left< (H - E)^2 \right>\) of the current step,
Nonewhen the gradient source doesn’t define it.
- property energy: Array | ndarray | bool | number | bool | int | float | complex | None#
Energy of the current step,
Nonewhen the gradient source doesn’t define it.
- property hamiltonian: Operator | None#
The Hamiltonian for the evolution,
Nonewhen the gradient source doesn’t define it.
- property holomorphic: bool#
Whether the state is holomorphic.
- property imag_time: bool#
Whether to use imaginary-time evolution.
- save(file: str | Path | BinaryIO) None#
Save the optimizer buffers to a file.
- solve(Obar: Array, Ebar: Array, buffers: dict) tuple[Array, dict]#
Generate the optimization step for given \(\bar O\) and \(\bar \epsilon\) by applying the updater strategy around
solve_equation.
- solve_equation(Obar: Array, Ebar: Array, **solver_kwargs) Array#
Solve the linear equation \(\bar O \dot \theta = \bar \epsilon\) for given \(\bar O\) and \(\bar \epsilon\). Real and imaginary parts are stacked for non-holomorphic states, and extra keyword arguments are forwarded to the numerical solver.
A
diag_preconditionerkeyword is handled here: if the solver declares it as an argument (e.g.lsmr), it is passed through; otherwise the right preconditioning is emulated by solving with \(\bar O / d\) and rescaling the output by \(1 / d\).
- property state: Variational#
Variational state to be optimized.