Skip to main content

Crate pounce_presolve

Crate pounce_presolve 

Source
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 λ=0 when forwarding eval_h / finalize_solution to 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_z and exposed via PresolveTnlp::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 BlockSolver trait 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 InequalityCoupled candidate 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§

CachedBounds
Cached, reduced view of the problem after presolve passes have run. Exposed for inspection from integration tests.
PresolveTnlp
TNLP wrapper that re-presents the inner problem after presolve.

Enums§

PresolveError
Errors that can arise while building a presolved TNLP.

Functions§

register
Re-export for callers that already imported pounce_presolve::register_options directly.
wrap_from_options
Convenience: read the presolve_* keys out of an OptionsList and call wrap_with_presolve.
wrap_with_presolve
Top-level entry: returns a TNLP wrapping inner with whatever presolve passes the option table has enabled. When the master switch is off, returns inner unchanged.
wrap_with_presolve_provider
Same as wrap_with_presolve but also installs an ExpressionProvider so passes like FBBT (issue #62) can see constraint expression trees. Callers who have the concrete inner TNLP type (pounce-cli with NlTnlp) should prefer this; the plain wrap_with_presolve leaves presolve_fbbt as a silent no-op.