slsqp_jax.inner.minres_qlp

MinresQLPSolver — full-KKT saddle-point solver based on PMINRES-QLP (Choi 2006) with an SPD block-diagonal preconditioner and an M-metric range-space refinement of the constraint residual.

slsqp_jax.inner.minres_qlp

Preconditioned MINRES-QLP on the full saddle-point KKT system.

class slsqp_jax.inner.minres_qlp.MinresQLPSolver[source]

Bases: AbstractInnerSolver

Preconditioned MINRES-QLP on the full saddle-point KKT system.

Solves the KKT system directly:

[B    A^T] [d]       [-g]
[A    0  ] [lambda] = [b ]

using PMINRES-QLP (Choi, Paige & Saunders, SISC 2011, Table 3.5) with a block-diagonal SPD preconditioner:

M = [B_diag^{-1}    0      ]
    [0              S^{-1} ]

where B_diag = diag(B_0) (L-BFGS diagonal) and S = A B_diag^{-1} A^T is the Schur complement.

After PMINRES-QLP returns the iterate d, an M-metric range-space projection drives A d = b on the active rows. The single shot is followed by up to proj_refine_max_iter rounds of iterative refinement, each costing one matvec + one Schur back-solve (no refactorisation). Refinement squares the relative feasibility error per round. See HR (2014, Algorithm 4.18 step 1(a)) for the motivation.

max_iter: int = 200
tol: float = 1e-10
max_cg_iter: int = 50
proj_refine_max_iter: int = 3
proj_refine_rtol: float = 1e-10
proj_refine_atol: float = 1e-14
solve(hvp_fn, g, A, b, active_mask, precond_fn=None, free_mask=None, d_fixed=None, adaptive_tol=None)[source]

Solve the equality-constrained QP subproblem.

Solves:

minimize    (1/2) d^T B d + g^T d
subject to  A[active] d = b[active]
            d[i] = d_fixed[i]  for i where free_mask[i] is False

where B is given implicitly via hvp_fn(v) = B @ v.

Return type:

InnerSolveResult

Parameters:
  • hvp_fn (Callable[[Float[Array, 'n']], Float[Array, 'n']])

  • g (Float[Array, 'n'])

  • A (Float[Array, 'm n'])

  • b (Float[Array, 'm'])

  • active_mask (Bool[Array, 'm'])

  • precond_fn (Callable[[Float[Array, 'n']], Float[Array, 'n']] | None)

  • free_mask (Bool[Array, 'n'] | None)

  • d_fixed (Float[Array, 'n'] | None)

  • adaptive_tol (Float[Array, ''] | float | None)

Args:

hvp_fn: Hessian-vector product function v -> B @ v. g: Linear term (gradient of objective). A: Combined constraint matrix (m x n). b: Combined RHS vector (m,). active_mask: Boolean mask (m,) indicating active constraints. precond_fn: Optional preconditioner v -> M @ v where M ~ B^{-1}. free_mask: Optional boolean mask (n,). When provided, only

variables with free_mask[i] = True are optimized.

d_fixed: Values for fixed variables (n,). Required when

free_mask is provided.

adaptive_tol: Optional Eisenstat-Walker tolerance override.

When provided, overrides the solver’s default convergence tolerance for this call only.

Returns:

InnerSolveResult with the direction, multipliers, and convergence flag.

__init__(max_iter=200, tol=1e-10, max_cg_iter=50, proj_refine_max_iter=3, proj_refine_rtol=1e-10, proj_refine_atol=1e-14)
Parameters:
  • max_iter (int)

  • tol (float)

  • max_cg_iter (int)

  • proj_refine_max_iter (int)

  • proj_refine_rtol (float)

  • proj_refine_atol (float)

Return type:

None