Skip to content

oximo v0.7.0

Latest

Choose a tag to compare

@GermanHeim GermanHeim released this 23 Sep 21:20
· 145 commits to main since this release
be7be00

oximo v0.7.0

This release adds first-class SOS1/SOS2 and indicator constraints, expands nonlinear expression support, and improves expression evaluation and large indexed model construction. It also updates POUNCE, adds shared solver lowering and reconstruction, and improves LP/MPS interoperability.

Breaking changes

  • Minimum supported Rust version is now 1.89 (up from 1.85).
  • Constraint declarations return model-bound handles (oximo-core)
    • Constraint and indexed constraint APIs now return handles, including range handles where a range can lower to one or two rows. Use .id() (or .ids() for range handles) when an API expects a raw ID.
  • Model operations validate expression ownership (oximo-core)
    • Model::fix, set_initial, and set_param now return Result and report ModelMismatchError for expressions from another model. Handle or explicitly discard these results as appropriate.
  • Expression arena access (oximo-core, oximo-expr)
    • Model::arena() now returns an ExprArenaSnapshot instead of Ref<ExprArena>. Use the snapshot's read APIs; direct mutable access is no longer available through this accessor.

Added

  • SOS1 and SOS2 constraints (oximo-core, #72, #73, #74)

    • Added sos_constraint! and programmatic APIs for declaring special ordered sets.
    • Added SOS support to LP/MPS I/O and solver backends, plus SOS-to-MILP reformulation for backends without native support.
    • Added access to reformulation artifacts and SOS examples.
  • Indicator constraints (oximo-core, #100, #101)

    • Added scalar, ranged, and indexed indicator declarations through indicator_constraint! and model APIs.
    • Added native backend paths where supported and a configurable reformulation path for other solvers.
    • LP/MPS readers and writers now handle indicator constraints.
  • Expression evaluation and nonlinear operators (oximo-expr, oximo-autodiff, #94, #97)

    • Added stack-safe, sharing-aware expression traversal, evaluation, and extraction for deep expression DAGs.
    • Added reusable compiled expression and batch evaluators.
    • Expanded nonlinear operators supported by expression evaluation, autodiff, and model I/O.
  • Shared solver lowering and reconstruction (oximo-solver, #93)

    • Added common preparation, lowering, and result reconstruction utilities for solver backends.
    • Added conformance coverage for quadratic and conic lowering across backends.
  • Indexed construction and constraint handles (#85, #89)

    • Large indexed model families can be prepared in parallel while preserving registration order.
    • Indexed and ranged constraints expose handles for accessing their registered rows.
  • POUNCE improvements (oximo-pounce, #88, #98, #102)

    • Updated to pounce-rs 0.12.
    • Added FBBT expression tapes and a second-opinion solve ladder for TNLP models.
    • Exposed additional POUNCE options and improved persistent model handling.
  • Sparse autodiff performance (oximo-autodiff, #75, #76, #77)

    • Added packed sparsity storage, improved coloring, and reusable Hessian sparsity patterns.

Changed

  • Solver backends now share more of their expression preparation, reformulation, and solution reconstruction logic. Result normalization clears stale optimality gaps when no valid incumbent remains.
  • Model-bound expression and constraint handles now detect cross-model use, preventing accidental ID collisions between models.
  • LP/MPS/NL writing now supports feasibility models; LP parsing handles leading negative coefficients and reports a missing objective sense as an I/O error.

Full changelog

v0.6.0...v0.7.0