Expand description
Algorithmic NLP preprocessing exposed as a composable TNLP wrapper.
Tracks pounce issue #20.
- Phase 0 — scaffolding, options table, no-op identity path.
- Phase 1 — Andersen-style bound tightening against linear rows.
- Phase 2 — redundant linear-constraint removal: rows whose
activity interval is implied by the (possibly Phase-1-tightened)
variable box are dropped from the problem the solver sees, then
reinstated with
λ=0when forwardingeval_h/finalize_solutionto the inner TNLP. - Phase 3 — structural LICQ check on the surviving equality
rows. Verdict is published via
PresolveTnlp::licq_verdict. - Phase 4 — bound-multiplier warm-start hints for variables
whose bounds were tightened by Phase 1. Hints are emitted on
init_zand exposed viaPresolveTnlp::z_warm_starts. - Phase 5 — sensitivity-aware passthrough: projects
user-supplied constraint metadata and scaling through the row
reduction on the way in, and expands outer→inner on the way out
in
finalize_metadata.
Re-exports§
pub use block_solve::BlockEquations;pub use block_solve::BlockSolveError;pub use block_solve::BlockSolveOptions;pub use block_solve::BlockSolveOutcome;pub use block_solve::BlockSolver;pub use block_solve::DampedNewtonSolver;pub use bound_tighten::tighten_bounds;pub use bound_tighten::LinearRow;pub use bound_tighten::TightenReport;pub use bound_tighten::INF_BOUND;pub use btf::BlockTriangularBlock;pub use btf::BlockTriangularForm;pub use components::SquareComponent;pub use components::SquareComponents;pub use coupling::classify_block;pub use coupling::objective_gradient_support;pub use coupling::AuxiliaryCouplingClass;pub use diagnostics::AuxiliaryPreprocessingDiagnostics;pub use diagnostics::AuxiliaryRejectionReason;pub use dulmage_mendelsohn::DMPart;pub use dulmage_mendelsohn::DulmageMendelsohnPartition;pub use incidence::EqualityIncidence;pub use incidence::InequalityIncidence;pub use incidence::ProbeView;pub use licq::licq_check;pub use licq::EqRow;pub use licq::LicqVerdict;pub use options::register_options;pub use options::AuxiliaryCouplingPolicy;pub use options::LicqAction;pub use options::PresolveOptions;pub use reduction_frame::ReductionFrame;pub use reduction_frame::ReductionStack;pub use redundant::find_redundant_rows;
Modules§
- auxiliary
- Phase-0 orchestrator for auxiliary-equality preprocessing.
- block_
solve - Lightweight damped-Newton solver for square ≤ 8-dim auxiliary
blocks, plus the
BlockSolvertrait for the larger-block fallback. - bound_
tighten - Phase 1 — bound tightening via constraint propagation.
- btf
- Tarjan SCC + topological order → block-triangular form on each connected component of the square-matched part.
- components
- Weakly-connected component extraction on the square-matched part of a Dulmage-Mendelsohn partition.
- coupling
- Coupling classification for candidate auxiliary blocks.
- diagnostics
- Diagnostics for the auxiliary-equality preprocessing pass (Phase 0).
- dulmage_
mendelsohn - Dulmage-Mendelsohn partition into under- / square- / overdetermined parts.
- fbbt
- Feasibility-Based Bound Tightening (FBBT).
- incidence
- Bipartite incidence graph between equality rows and variables.
- inequality_
projection - Inequality projection for
InequalityCoupledcandidate blocks. - licq
- Phase 3 — LICQ degeneracy detection.
- matching
- Hopcroft-Karp bipartite matching on an
crate::incidence::EqualityIncidence. - options
- Option-table integration for
pounce-presolve. - reduction_
frame - Postsolve frame stack for the auxiliary-equality preprocessing pass.
- redundant
- Phase 2 — redundant linear-constraint detection.
- trivial_
elim - Trivial-elimination pre-pass for the auxiliary-equality preprocessing pipeline.
Structs§
- Cached
Bounds - Cached, reduced view of the problem after presolve passes have run. Exposed for inspection from integration tests.
- Presolve
Tnlp - TNLP wrapper that re-presents the inner problem after presolve.
Enums§
- Presolve
Error - Errors that can arise while building a presolved TNLP.
Functions§
- register
- Re-export for callers that already imported
pounce_presolve::register_optionsdirectly. - wrap_
from_ options - Convenience: read the
presolve_*keys out of anOptionsListand callwrap_with_presolve. - wrap_
with_ presolve - Top-level entry: returns a TNLP wrapping
innerwith whatever presolve passes the option table has enabled. When the master switch is off, returnsinnerunchanged. - wrap_
with_ presolve_ provider - Same as
wrap_with_presolvebut also installs anExpressionProviderso passes like FBBT (issue #62) can see constraint expression trees. Callers who have the concrete inner TNLP type (pounce-cliwithNlTnlp) should prefer this; the plainwrap_with_presolveleavespresolve_fbbtas a silent no-op.