Skip to content

v0.4.0 — Mittelmann parity with MA57 + auto-armed cascade-break

Choose a tag to compare

@jkitchin jkitchin released this 17 May 21:42
· 290 commits to main since this release

Headline

feral is now at parity with MA57 on the 47-problem Mittelmann NLP
benchmark panel (Ipopt 3.14.20 + --linear_solver=feral vs
--linear_solver=ma57, 600 s wall timeout each):

solver solve-rate geomean wall (37 both-solved) aggregate wall
MA57 39/47 1.000 3166 s
feral 39/47 0.960 1699 s (54%)

Two changes closed the gap: an auto-armed cascade-break default
in the C-ABI and a tightened MC64 routing gate. Headline rescues
on Mittelmann: marine_1600 -96%, clnlbeam -87%, robot_1600 -79%,
corkscrw -70%, dtoc2 rescued from timeout.

Highlights

  • Auto-armed cascade-break in feral_new (Ipopt C-ABI). Arms
    Solver::with_auto_cascade_break(0.05) by default, disable with
    FERAL_AUTO_CB_BETA=0. (#37, #38)
  • Scaling routing tightened. ScalingStrategy::Auto now requires
    a dense-arrow head (max_col_nnz > 32) in addition to the
    diag-only mass threshold, fixing a 1-D-PDE-KKT regression. (#68)
  • MA57-style static-pivot perturbation knob + non-finite input
    validation + closed-form 2x2 eigenvalue inertia classifier +
    stale-MC64-cache invalidation. (#38)
  • mittelmann_ipopt benchmark harness — runs Ipopt+feral and
    Ipopt+MA57 over the 47-problem NLP panel and produces a side-by-
    side report.
  • Python bindings (feral-solver on PyPI) now at 0.4.0 with
    full IPM helper (feral.ipm.KktSolver), scipy.sparse adapters,
    and JAX interop.
  • Ipopt integration documented end-to-end in the README, with the
    feral-ipopt-shim subproject providing one-shot
    make ipopt && make hs071.

See CHANGELOG.md
for the full per-PR release notes (auto-CB, scaling routing,
diagnostic tracers, env-knob reference, parity panel notes,
oracle-consensus correctness gate, and v0.4.0 housekeeping).

Install

pip install feral-solver         # Python wheels (CPython 3.10+)
cargo add feral                  # Rust crate

Compiling FERAL into Ipopt

See the "Using FERAL inside Ipopt" section of the README — one-shot
recipe is cd feral-ipopt-shim && make ipopt && make hs071.