What's Changed
Platforms
- Add Python 3.14 support.
Dependencies
C++
- abseil-cpp=20250814.1
- Protobuf=v33.1
- HiGHS=v1.12.0
- SCIP=v10.0.0
- NEW XPressMP is supported in MathOpt. It will automatically load the XPressMP shared library on your computer
Routing
- Improved routing performance and search event support (at optimal).
- Improved Doxygen documentation.
- Reworked routing samples (#4590).
- Exported filters update and other improvements from main.
CP-SAT
- Improvements to the
no_overlap_2dconstraint (presolve, propagation, and cuts). - Detect, store and use precedences in presolve, propagation, and cuts.
- Extensive work on LRAT proof production and checking.
- Improve linear1 and linear2 encodings and processing.
- Support for set variables and constraints (experimental).
- Extend support for enforcement literals to more constraints.
- Optimize Python layer, speed up proto generation, and improve typing support (#4733).
- Improve support for gil-less Python 3.14.
- Add soft constraint examples.
- Improve shared tree workers and clause sharing.
- Print solution on SIGTERM.
- Fix various bugs and improve heuristics (#4907, #4746, #4839, #4929, #4743, #4693, #4666, #4654).
- Improved scheduling cuts and memory management.
MathOpt
- Pass solution hint to HiGHS from MathOpt (#4737).
- Propagate nullability and add nullability to
SolveInterrupter(#4959, #4958). - Rework GSCIP and solver integration; fix Windows build issues.
- Backport various improvements from main.
Linear Solver
- Refactor MPSolver interface registration to include runtime readiness checks (#4973).
- Add lazy constraints support in XPRESS interface.
- MPSolver-XPRESS: Remove superfluous calls to
XPRSloadlpandXPRScreateprob(#4667). - Support for constant terms in
DoubleLinearExpr::AddExpression. - Added support for Gurobi 12.0.2, 12.0.3, and 13.0.0.
- Fixed XPRESS compilation on Windows and updated Bazel build (#4945, #4956).
- Support SCIP 10.0.0.
Build & Dependencies
- Bumped dependencies: Abseil 20250512.0, Protobuf v31.1, gTest 1.17.0, Benchmark 1.9.2.
- Dropped support for Python 3.8; minimum version is now 3.9.
- Modernize Bazel build and improve Java, .NET, and Julia support (#4885, #4928, #4879).
- Added automated ccache support in CMake.
- Fix Python build with
BUILD_TESTING=OFF.
Other
- Added
space_saving_most_frequentutility. - Column generation Bin Packing heuristic based on CFT (#4639).
- Reworked
SortedDisjointIntervalListto support copy, deepcopy, and iterators in Python. - Added
ORToolsBinaries.jlfor Julia. - PDLP: Fix test when using pytest 8.4.0.
- Removed fuzztest support from OR-Tools (#4938).%
Changes (PR)
- MPSolver-XPRESS: Remove superfluous calls to XPRSloadlp and XPRScreateprob by @pet-mit in #4667
- cmake: update HiGHS to 1.11 by @galabovaa in #4670
- bazel: Bump HiGHS to 1.11 by @galabovaa in #4671
- cmake: Add support for custom protoc executable via OR_TOOLS_PROTOC_EXECUTABLE by @clementperon in #4679
- Fix compilation with iterator with C++ 17 by @clementperon in #4696
- Fix compat with protobuf < 5.26 by @clementperon in #4697
- Format py files by @gchatelet in #4702
- Turn some
.ifiles into.swigby @gchatelet in #4712 - Column generation Bin Packing heuristic based on CFT by @c4v4 in #4639
- Add MPConstraint::Clear() to C# wrapper by @rs-blade in #4728
- Backport trivial changes by @gchatelet in #4734
- Backport string_view_migration.h by @gchatelet in #4735
- Fix bazel load rules by @gchatelet in #4740
- Fix load statements by @gchatelet in #4742
- Pass solution hint to HiGHS from mathopt by @pavlomuts in #4737
- build(deps): bump urllib3 from 2.2.2 to 2.5.0 in /bazel in the pip group across 1 directory by @dependabot[bot] in #4700
- math_opt: only run SCIP tests if enabled by @flokli in #4745
- build(deps): bump actions/checkout from 4 to 5 in the github-actions group by @dependabot[bot] in #4752
- Remove unnecessary exports_files by @gchatelet in #4757
- build(deps): bump actions/setup-java from 4 to 5 in the github-actions group by @dependabot[bot] in #4763
- build(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #4817
- build(deps): bump actions/checkout from 5 to 6 in the github-actions group by @dependabot[bot] in #4925
- build(deps): bump jupyterlab from 4.4.3 to 4.4.8 in /bazel in the pip group across 1 directory by @dependabot[bot] in #4927
New Contributors
- @clementperon made their first contribution in #4679
- @rs-blade made their first contribution in #4728
- @pavlomuts made their first contribution in #4737
- @flokli made their first contribution in #4745
Known issues
Wrappers (.Net, Java, Python)
-
routing: SetAllowedVehiclesForIndex not working in wrappers (changed parameters) #4982
-
sat:
solver.status_name()raises TypeError: 'ortools.sat.python.cp_model_helper.CpSolverStatus' object is not callable #4985 -
sat:
CpSolver.Solve()callback breaking argument change #4988
MacOS
You must use swig <= 4.3.1 to avoid Director issue on python, unfortunately homebrew only provides the "broken" swig 4.4.1
to install swig manually:
first download swig 4.3.1: https://sourceforge.net/projects/swig/files/swig/swig-4.3.1/
# Optional uninstall brew version if any
brew uninstall swig
# Build swig from source and install it
cd /tmp
tar xzvf ~/Downloads/swig-4.3.1.tar.gz
cd swig-4.3.1/
./configure --prefix=${HOME}/swig-4.3.1
make
make install
export PATH="${HOME}/swig-4.3.1/bin:$PATH"
# To check
command -v swig
swig --versionref: swig/swig#3279
Full Changelog: v9.14...v9.15