Skip to content

v2.2.7

Latest

Choose a tag to compare

@LucasBoTang LucasBoTang released this 02 Jul 10:07
· 16 commits to main since this release

🎉 We're happy to announce the PyEPO 2.2.7 release. 🎉

This release tightens the DSL and the solver backends. The DSL expression algebra is now stricter and more numpy-consistent: a numpy array broadcasts against an expression the numpy way, while two expressions must share a shape (no implicit replication, no flat carve-out). A quadratic objective term is made explicitly solve-only across the training and metric stack, and a broad batch of backend correctness fixes lands for MPAX, COPT, OR-Tools, VRP cuts, and Frank-Wolfe. Python 3.14 is now declared supported.

What's New

Features

  • Two DSL expressions must share a shape
  • A numpy array combined with an expression broadcasts by numpy's own row/column rules
  • MPAX warns when it relaxes integer variables to their bounds
  • CaVE collate is auto-wired through optDataLoader

Bug Fixes

  • Quadratic objective is now solve-only end to end: pyepo.func training methods and pyepo.metric metrics reject a DSL model carrying a quadratic objective term at construction, and compile() warns; quadratic constraints are unaffected
  • Consistent objective offset across the solve, cache, and MPAX paths
  • MPAX: dtype and shape edge cases in setObj, the KNN dataset, Frank-Wolfe, and the solution pool
  • COPT: guarded solution reads with an explicit availability check; copied variables mapped by name; only violated RCI cuts added in the VRP callback
  • OR-Tools: solver parameters reapplied when a model is copied
  • VRP: single-customer depot round trips forbidden in the MTZ formulation; RCI cut recording decoupled from lazy-cut submission
  • Frank-Wolfe: displaced atom mass no longer dropped on active-set buffer overflow
  • CaVE: worker pools skip the optmodel preload; regret dataloaders ignore the extra CaVE fields
  • Datasets: inputs normalized to arrays across subclasses; MSE averaged over the yielded samples
  • Model reconstruction: rebuild works with var-positional and non-copyable constructor arguments
  • Each solver pool gets a unique pathos id