Skip to content

Feature request: miniter (minimum sweeps) for DMRG/DMRG2 #463

Description

@lkdvos

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions