Repository navigation
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.
- Constraint and indexed constraint APIs now return handles, including range handles where a range can lower to one or two rows. Use
- Model operations validate expression ownership (
oximo-core)Model::fix,set_initial, andset_paramnow returnResultand reportModelMismatchErrorfor expressions from another model. Handle or explicitly discard these results as appropriate.
- Expression arena access (
oximo-core,oximo-expr)Model::arena()now returns anExprArenaSnapshotinstead ofRef<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.
- Added
-
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.
- Added scalar, ranged, and indexed indicator declarations through
-
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-rs0.12. - Added FBBT expression tapes and a second-opinion solve ladder for TNLP models.
- Exposed additional POUNCE options and improved persistent model handling.
- Updated to
-
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.