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:
AbstractInnerSolverPreconditioned 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) andS = A B_diag^{-1} A^Tis the Schur complement.After PMINRES-QLP returns the iterate
d, an M-metric range-space projection drivesA d = bon the active rows. The single shot is followed by up toproj_refine_max_iterrounds 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.- 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:
- 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] = Trueare optimized.- d_fixed: Values for fixed variables (n,). Required when
free_maskis provided.- adaptive_tol: Optional Eisenstat-Walker tolerance override.
When provided, overrides the solver’s default convergence tolerance for this call only.
- Returns:
InnerSolveResultwith the direction, multipliers, and convergence flag.