pounce-restoration 0.4.0

Restoration phase for POUNCE (port of Ipopt's Algorithm/Resto*): RestoIpoptNLP, RestoMinC_1Nrm, RestoFilterConvCheck, etc. Phase 9 — currently scaffolded with trait surface and stubbed strategies; full implementation lands incrementally.
Documentation

pounce-restoration

Restoration phase for POUNCE. Port of Ipopt's Algorithm/Resto*.

What it does

When the filter line search cannot accept any step from the current iterate, the regular IPM hands control here. The restoration phase solves a relaxed feasibility problem:

min  ρ * ‖p - n‖_1 + 0.5 * ζ * ‖D_R (x - x_R)‖_2^2
s.t. g(x) - p + n = 0,
     x_L ≤ x ≤ x_U,   p ≥ 0,  n ≥ 0

so that constraint violation is driven down. On success it returns to the regular IPM with a new iterate that the filter is willing to accept. See ref/Ipopt/AGENT_REFERENCE/RESTORATION.md for the full write-up.

Modules

Module Upstream counterpart
r#trait IpRestorationPhase.hpp
resto_nlp IpRestoIpoptNLP.{hpp,cpp}
min_c_1nrm IpRestoMinC_1Nrm.{hpp,cpp}
conv_check IpRestoFilterConvCheck.{hpp,cpp}
aug_resto_system_solver IpRestoAugSystemSolver.{hpp,cpp}
init IpRestoIterateInitializer.{hpp,cpp}
resto_resto IpRestoRestorationPhase.{hpp,cpp}
resto_inner_solver inner IPM driver for the resto sub-problem
resto_alg_builder strategy wire-up for the inner solver
output iteration output

Status

Phase 9 of the port. The trait surface and strategy skeletons are in place and exercised on CUTEst / Mittelmann problems; the cycle detector, μ-min widening, and almost-feasible gates have all landed recently (see git log --oneline crates/pounce-restoration). Edge-case bug-hunt continues in tandem with the CUTEst sweep.

License

EPL-2.0.