Skip to content

ripopt v0.7.1

Choose a tag to compare

@jkitchin jkitchin released this 25 Apr 22:10
· 371 commits to main since this release

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: TrySoftRestoStep with 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_ASL ABI: models depending on user-supplied function libraries (IDAES cbrt, Sundials, custom property packages) now load and solve in ripopt without modification (#15, #20)
  • warm_start_target_mu option for warm-start μ override (roadmap #18)
  • user_obj_scaling, mu_oracle_quality_function, quality_function_centrality exposed through C API, AMPL CLI, and the Python binding
  • IPM iteration log gains a compl column

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 library
  • pip install ripopt (PyPI) — Python binding via the AMPL NL interface
  • pip install pyomo-ripopt (PyPI) — Pyomo SolverFactory('ripopt') integration
  • Ripopt.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.