ripopt v0.7.1
Patch release focused on the Reference-Gap Roadmap: porting concrete behavioral details from Ipopt 3.14 that the v0.7.0 ripopt-vs-Ipopt audit flagged as missing.
Algorithmic ports from Ipopt 3.14
- Full
IpScaledNLP-equivalent x-scaling wrapper (roadmap #6) PDPerturbationHandlerδ-escalation schedule (roadmap #19)- Soft restoration phase:
TrySoftRestoStepwith the E_μ test (roadmap #12) - Restoration convergence three-gate:
RestoFilterConvCheck(roadmap #13) - μ-dependent δ_c regularization (roadmap #6)
- Separate s_d / s_c convergence scaling, drop of the legacy 1e4 cap (roadmap #1)
- Drop of the ±1 inertia acceptance heuristic (roadmap #5)
- Centrality term in the Quality-Function μ oracle (roadmap #14)
New features
- AMPL external functions via the
funcadd_ASLABI: models depending on user-supplied function libraries (IDAEScbrt, Sundials, custom property packages) now load and solve in ripopt without modification (#15, #20) warm_start_target_muoption for warm-start μ override (roadmap #18)user_obj_scaling,mu_oracle_quality_function,quality_function_centralityexposed through C API, AMPL CLI, and the Python binding- IPM iteration log gains a
complcolumn
Refactoring
~198 commits extracting named helpers from src/ipm.rs (e.g. compute_barrier_phi, apply_gondzio_mcc, run_line_search_loop, run_post_ls_restoration_cascade, try_soft_restoration, try_nlp_restoration_phase). No behavioral change — the IPM main loop now reads as a sequence of named phases instead of a 3000-line control-flow blob.
Benchmarks
| Suite | v0.7.0 | v0.7.1 | Native Ipopt |
|---|---|---|---|
| HS strict-Optimal | 118/120 | 118/120 | 116/120 |
| CUTEst strict-Optimal | 560/727 | 556/727 | 556/727 |
| HS geo-mean speedup | 15.0× | 20.8× | 1× (baseline) |
| CUTEst geo-mean speedup | 9.9× | 12.0× | 1× (baseline) |
CUTEst regressed by 4 problems (20 lost, 16 gained) on least-squares / rank-deficient Jacobian families. The most plausible suspects are the stricter s_d/s_c convergence metric and the new μ-dependent δ_c regularization. Tagged comparison artifacts: benchmarks/cutest/results_v0.7.0.json vs benchmarks/cutest/results_v0.7.1.json.
Distribution
cargo add ripopt(crates.io) — the core Rust librarypip install ripopt(PyPI) — Python binding via the AMPL NL interfacepip install pyomo-ripopt(PyPI) — PyomoSolverFactory('ripopt')integrationRipopt.jl— Julia/JuMP via MathOptInterface- GAMS solver link via the GMO API
- AMPL via
--solver=ripopt
See CHANGELOG.md for the full list of changes.