Expand description
Sensitivity analysis for POUNCE — port of upstream Ipopt’s contrib/sIPOPT/.
§Status
Phases A–C complete. Wired today:
schur_data::IndexSchurData+p_calculator::IndexPCalculator: row-selector representation of the perturbation matrixB.backsolver::DenseLuBacksolver+PdSensBacksolver: backsolves against the converged KKT factor (test / live IPM, respectively).schur_driver::DenseGenSchurDriver: dense Schur-complement factorS = -B K⁻¹ Bᵀwith parallel right-hand-side solves.step_calc::StdStepCalc+sens_app::SensApplication: high-levelparametric_step(Δp, dx)andreduced_hessian::compute_reduced_hessianentry points.SensSolve/SensResult: one-call builder (covers theon_convergedplumbing typically required to wire the above into anIpoptApplication).
Verified against upstream sIPOPT 3.14.19’s parametric_cpp golden
output to 1e-8 (see tests/parametric_cpp.rs); the standalone
pounce_sens AMPL driver in pounce-cli matches sensitivity_amplsolver’s
_sens_sol output on representative .nl problems.
Phase D progress (per pounce#7):
- Fixed-variable lifting ✔ —
pounce_senshandlesn_x != n_fullvia theIpoptNlp::full_x_to_var_x/var_x_to_full_x/full_g_to_c_blocktrait methods (which delegate toBoundClassification.x_not_fixed_map/c_map). - Reduced-Hessian eigendecomposition ✔ — pure-Rust cyclic Jacobi
in
eigen::symmetric_eigen; surfaced viaSensApplication::compute_reduced_hessian_eigen,SensSolve::with_reduced_hessian_eigen, thepounce_sens --rh-eigendecompflag, and the Pythonsolve_with_sens(rh_eigendecomp=True)kwarg. sens_boundcheckbound projection ✔ (single-pass clamp) —boundcheck::clamp_step_to_bounds/boundcheck::clamp_with_nlpproject the perturbed step onto[x_l, x_u]after the linear solve. Surfaced viaSensSolve::with_boundcheck,pounce_sens --sens-boundcheck, and the Pythonsolve_with_sens(sens_boundcheck=True)kwarg. Upstream’s iterative Schur refinement (re-factorize on each violation) is not ported — seeboundcheckmodule docs.
§Algorithmic reference
Pirnay, H., López-Negrete, R., and Biegler, L.T. (2012). Optimal sensitivity based on IPOPT. Mathematical Programming Computation, 4(4), 307–331. DOI: 10.1007/s12532-012-0043-2.
Verified 2026-05-14 via Crossref: title, authors (Hans Pirnay; Rodrigo López-Negrete; Lorenz T. Biegler), MPC volume 4 issue 4 pp 307–331.
§Upstream source mirror
Port targets ref/Ipopt/contrib/sIPOPT/src/ in this repo
(EPL-2.0, © Hans Pirnay 2009–2011 per the file headers). Each
public item in this crate documents the upstream symbol it mirrors
with file path and (where stable) line numbers.
Re-exports§
pub use algorithm_backsolver::PdSensBacksolver;pub use backsolver::DenseLuBacksolver;pub use backsolver::SensBacksolver;pub use convenience::SensResult;pub use convenience::SensSolve;pub use eigen::symmetric_eigen;pub use p_calculator::IndexPCalculator;pub use p_calculator::PCalculator;pub use reduced_hessian::compute_reduced_hessian;pub use schur_data::IndexSchurData;pub use schur_data::SchurData;pub use schur_driver::DenseGenSchurDriver;pub use schur_driver::SchurDriver;pub use sens_app::register_options;pub use sens_app::SensApplication;pub use sens_app::SensOptions;pub use solver::ConvergedState;pub use solver::Solver;pub use solver::SolverError;pub use step_calc::SensStepCalc;pub use step_calc::StdStepCalc;pub use step_calc::WithBacksolver;
Modules§
- algorithm_
backsolver PdSensBacksolver—SensBacksolveradapter over the convergedPdFullSpaceSolverfrompounce-algorithm.- backsolver
SensBacksolvertrait — abstract backsolver against a converged KKT factor.- boundcheck
- Single-pass bound clamping for the parametric sensitivity step.
- convenience
- High-level “solve, then run sensitivity” entry point for callers
that don’t want to write the
set_on_convergedcallback +PdSensBacksolver+IndexSchurDataplumbing by hand. - eigen
- Symmetric eigendecomposition for small dense matrices via the cyclic Jacobi rotation method.
- p_
calculator PCalculatortrait surface.- reduced_
hessian ReducedHessianCalculator— port of upstreamSensReducedHessianCalculator.{hpp,cpp}.- schur_
data SchurDatatrait surface and theIndexSchurDataflavor.- schur_
driver SchurDrivertrait +DenseGenSchurDriverimplementation.- sens_
app SensApplication— high-level entry point for sensitivity analysis.- solver
Solver— value-typed session API that holds anIpoptApplication, its TNLP, and the converged KKT factor between calls.- step_
calc SensStepCalctrait — orchestrates the sensitivity step computation.