Rayleigh-Gauss-Newton
pynqs.optim.grad.rgn.RGN_grad implements the regularized
Rayleigh-Gauss-Newton (RGN) update described by Peng and Chan,
Phys. Rev. Research 7, 043351 (2025). It follows the same stochastic
objects used by pynqs.optim.grad.lm.LM_grad:
The sampled gradient, overlap, and approximate Hessian are
RGN minimizes the second-order expansion with the SR overlap penalty, which gives the linear equation
In PyNQS the optimizer stores the preconditioned gradient
and the optimizer step applies theta <- theta - lr*dtheta. For the
paper’s convention use lr=1.
Usage in VMCOptimizer:
from pynqs.optim import RGNConfig
vmc_opt = VMCOptimizer(
nqs=model,
opt=opt,
sampler_param=sampler_param,
electron_info=electron_info,
use_rgn=True,
rgn_config=RGNConfig(
epsilon=1.0,
delta=0.0,
damping_lambda=1.0e-3,
),
)
RGNConfig.epsilon is the overlap-penalty scale \(\epsilon\).
Small values approach SR, while math.inf gives the approximate
Newton limit based on \(H^{\rm eff}\). RGNConfig.delta is the
H-side shift, analogous to the \(\delta I\) added to L in LM.
RGNConfig.damping_lambda is the S-side shift, analogous to the
S-side shift added to R in LM and to damping_lambda in SR/minSR.
For finite \(\epsilon\), damping_lambda enters the final matrix
as \(\delta_s/\epsilon\). Each field can also be a
Callable[[int], float] scheduler receiving the optimization step.