pounce-convex
Interior-point solvers for POUNCE's convex problem classes: LP and convex QP today, with cone-generic scaffolding for the conic family (SOCP, exponential/power cones, SDP) planned.
This crate is Phase 2 of the LP/QP routing plan
(dev-notes/lp-qp-routing.md). It provides a bare primal-dual
interior-point method for convex QP in standard form:
minimize ½ xᵀP x + cᵀx
subject to A x = b
G x ≤ h
LP is the P = 0 case and is solved by the same driver.
Design
- Cone-generic. The interior-point iteration is built over a
[
cones::Cone] trait with only the nonnegative orthant (cones::nonneg) implemented. Later phases add SOC / PSD / exp / pow cones behind the same trait, so the driver is extended, not rewritten. - Shared factorization. The symmetric indefinite KKT system is solved
through
pounce_linsol::Factorization— the same factor-once / solve-many handle the NLP path uses (feral by default, MA57 optional). No new linear-algebra dependency. - Mehrotra predictor-corrector with HSDE. The iteration uses a
Mehrotra predictor-corrector step over a homogeneous self-dual embedding
(
use_hsdedefaults totrue— see [hsde]/[hsde_nonsym]), with Ruiz equilibration ([equilibrate]) on the non-HSDE path for badly-scaled data. The SOC / exponential / power / PSD cones (cones::{soc,exp,power, psd}) are present as tested building blocks for the conic family.
Status
Solves convex LP and QP correctly (validated against problems with
analytically known optima, and exercised by the head-to-head benchmark
suites benchmarks/lp_convex and benchmarks/qp_convex against the
general NLP path). Wired into the CLI dispatch
(crates/pounce-cli/src/dispatch.rs): solver_selection=auto routes LP
and convex QP here (and convex QCQP to the same crate's SOCP IPM), and
solver_selection=lp-ipm | qp-ipm | socp force it explicitly. The conic
(SOCP / exponential / power / PSD) family beyond the QP/LP path is still
under construction.