Feature request: miniter (minimum sweeps) for DMRG/DMRG2
Motivation
The DMRG/DMRG2 stop test now uses the Galerkin error as the convergence measure (previously the
overlap-based ϵ_conv = 1 - |⟨old|new⟩|).
The Galerkin criterion can be near-zero already on the first sweep when the initial guess is
close to an eigenvector, so the optimizer declares convergence and returns immediately — even
though more sweeps would move the state meaningfully.
This surfaced in FiniteExcited: with an unperturbed ground-state initial guess, the first
excited-state search converged instantly on the ground state instead of climbing to the excited
state. We worked around it there by perturbing the initial guess, but a general safeguard is
still desirable.
Proposal
Add a miniter::Int field to the ground-state sweep algorithms (at least DMRG and DMRG2,
possibly VUMPS/IDMRG for consistency), defaulting to 1 (no behavior change). Gate the
convergence break on it:
if ϵ <= alg.tol && iter >= alg.miniter
...
break
end
Callers that want to force a minimum number of sweeps (e.g. FiniteExcited, or any run starting
from a near-eigenvector guess) can then set miniter > 1.
Notes / open questions
- Default should be
1 to preserve current behavior; callers opt in to a higher value.
- Decide whether
FiniteExcited should bump its gsalg's miniter automatically (e.g. via
Accessors.@set) or leave it entirely to the user.
- Scope: DMRG/DMRG2 only, or all iterative ground-state solvers.
Deferred from the change that switched DMRG/DMRG2 convergence to the Galerkin error.
Feature request:
miniter(minimum sweeps) for DMRG/DMRG2Motivation
The DMRG/DMRG2 stop test now uses the Galerkin error as the convergence measure (previously the
overlap-based
ϵ_conv = 1 - |⟨old|new⟩|).The Galerkin criterion can be near-zero already on the first sweep when the initial guess is
close to an eigenvector, so the optimizer declares convergence and returns immediately — even
though more sweeps would move the state meaningfully.
This surfaced in
FiniteExcited: with an unperturbed ground-state initial guess, the firstexcited-state search converged instantly on the ground state instead of climbing to the excited
state. We worked around it there by perturbing the initial guess, but a general safeguard is
still desirable.
Proposal
Add a
miniter::Intfield to the ground-state sweep algorithms (at leastDMRGandDMRG2,possibly
VUMPS/IDMRGfor consistency), defaulting to1(no behavior change). Gate theconvergence break on it:
Callers that want to force a minimum number of sweeps (e.g.
FiniteExcited, or any run startingfrom a near-eigenvector guess) can then set
miniter > 1.Notes / open questions
1to preserve current behavior; callers opt in to a higher value.FiniteExcitedshould bump itsgsalg'sminiterautomatically (e.g. viaAccessors.@set) or leave it entirely to the user.Deferred from the change that switched DMRG/DMRG2 convergence to the Galerkin error.