Releases: google/or-tools
v9.12
Platforms
- This will be the last release to support Python3.8.
- Add Python 3.13 support.
- Add muslinux wheel package.
- This will be the last release to support Java 1.8
Builds
- dependencies (protobuf, abseil, re2, highs) are now seperated shared libraries
- Windows libraries are now dll
Dependencies
C++
- Protobuf 29.3
- CoinUtils: 2.11.12
- Osi: 0.108.11
- Clp: 1.17.10
- Cgl: 0.60.9
- Cbc: 2.10.12
- HiGHS: 1.9.0
- Scip: v920
- benchmark: 1.9.1
Graph
- Old graph classes (
EbertGraph
,StarGraph
,ForwardEbertGraph
,ForwardStarGraph
) have been removed.
UseReverseArcListGraph<>
andListGraph<>
instead. Those are conceptually similar, but typically perform better.
APIs are mostly compatible.
CP-SAT
- Improve the no_overlap_2d layer (propagation, presolve, cuts)
- Add RandomHalfBranching search heuristics
- Improve Cumulative propagation and cuts
- Rewrote the hint transformation during presolve. Feasible and complete hints should now be preserved after presolve
- Rewrite and optimize the linear expression part of the python layer
- Improve shared tree workers, implement job affinity with workers
- Add scheduling samples
- Support 1-var affine expressions in the Automaton constraint
- Support 1-var affine expressions in the Element constraint
- Speed up LNS
- Tens of fixes for bugs found by fuzzer
Linear Solver
- Add
WriteModelToMpsFile
toMPSolver
in Java, Python and .NET
Math Opt
- Add Xpress support.
Model Builder
- Speedup of the python expression part.
- Add HiGHS support.
SCIP
- This is likely the last release of SCIP build with glop
- We will transition to SCIP with SOPLEX builds
- This is already the case for the Bazel build
Known Issues
- MathOpt: python_math_opt_solver_test failed on macOS #4460
- cmake: MacOS Intel based python wheel do not contains mypy files #4540
- cmake: cxx_graph_shortest_paths_test (Timeout) #4539
Full Changelog: v9.11...v9.12
v9.11
Platforms
- Add Almalinux 9 support.
- Add Rockylinux 9 support.
- Add Ubuntu 24.04 LTS support.
Dependencies
C++
- abseil-cpp:
20240722.0
. - HiGHS:
1.7.2
. - googletest:
v1.15.2
. - Add support for Gurobi 11.0.3
Java
- maven 3.6+
Algorithms
- Add experimental
set_cover
python binding.
CP-SAT
- Improve
no_overlap_2d
, linear propagation
What's Changed
- Updates for OpenBSD build support by @ron-at-swgy in #4257
- Use correct fp_env definition for OpenBSD by @ron-at-swgy in #4259
- Update SWIG flags for OpenBSD by @ron-at-swgy in #4266
New Contributors
- @ron-at-swgy made their first contribution in #4257
Known issues
- CP-SAT callbacks in Python, Java, .NET can slow down search performance a lot as it is possible that search will continue until the time limit is crossed even as the problems has been closed before.
Full Changelog: v9.9...v9.11
v9.10
Dependencies
-
ZLIB
1.3.1
. -
abseil-cpp
20240116.2
. -
Protobuf
v26.1
. -
Re2
2024-04-01
. -
HiGHS
v1.7.0
. -
Scip
v900
. -
Add support for Gurobi 11.
C++ Changes
- replace
std::vector&
withabsl::Span
. - replace
const std::string&
withabsl::string_view
. - Improve XPRESS support.
- Remove the command line flags
--logtostderr
which was a no-op since the implementation of the logging module in abseil. Please use--stderrthreshold=0
instead.
Algorithms
- more work on set covering.
CP-SAT
- Improve propagation of no_overlap_2d
- Fix crash in no_overlap_2d Large Neighborhood Search
- Improve core based search
- Preserve hints during presolve
- Improve lb_tree_search
- Improve python typing
- Improve communication between shared_tree workers
- Add best bound callback
- Improve presolve (in particular lin_max)
- Merge the linear propagator and the difference propagator
- Change pseudo-cost implementation to be closer to the literature
- Add missing int_mod evaluation for violation_ls and feasibility_jump
Known Issue
- [bazel] Highs 1.7.0 math_opt tests failed #4203
- [python ]MathOpt solver_test timeout on macOS #4209
- [windows] Lots of report of crashes (#4224, #4225, #4226, #4227). Make sure visual studio is fully updated.
- [java] Protobuf was updated to v26.1. On the java platform, the corresponding package (5.26.1) in incompatible with 3.x.
- [bazel] Building on Windows against MSVC is not working #4241.
Full Changelog: v9.9...v9.10
v9.9
Dependencies
- abseil-cpp
20240116.1
. - re2
2024-02-01
. - Protobuf
v25.3
. - Scip
v810
. - pybind11
v2.11.1
. - googletest
1.14.0
.
C++ Changes
- use of
absl::Span
instead ofstd::vector
. - replace
const std::string&
withabsl::string_view
. - use of absl log.
CP-SAT
- Improvements to no_overlap_2d algorithms.
- rewrite python API to be pep8 compliant.
model.AddBoolOr
->model.add_bool_or
- Improve the linear propagator code.
- Use the
~
operator in C++ and Python for the negation of a literal.
Linear Solver
- make XPRESS support using a dynamic load (like gurobi support)
Math Opt
- Sync with google3
- Add c++ and python support in CMake based build.
- Add math_opt in Python wheel package
- Enable few C++ tests with bazel based build.
Known Issue
-
Python windows wheel package are 108Mb so we can't upload them to pypi yet.
note: a file limite request has been filled (pypi/support#3714) -
Build on Ubuntu 20.04 LTS failed -> no archives available for this OS...
dev note: looking at the trace of the release process...$ cd tools/docker $ make amd64_ubuntu-20.04_cpp_build ... In file included from /root/or-tools/ortools/graph/dag_constrained_shortest_path.cc:14: /root/or-tools/ortools/graph/dag_constrained_shortest_path.h:18:10: fatal error: concepts: No such file or directory 18 | #include <concepts> | ^~~~~~~~~~
This means or-tools source code is poissed with C++20 headers since google3 now allow C++20...
=> Will have no choice but to drop C++17 support in the short term as an internal component of google3 code base.
What's Changed
- build(deps): bump urllib3 from 2.0.4 to 2.0.7 in /bazel by @dependabot in #3988
- Fix memory leaks in file::GetContents and file::SetContents by @pjh in #4011
- build(deps): bump jupyter-server from 2.7.2 to 2.11.2 in /bazel by @dependabot in #4014
- Improve the Xpress interface and add dynamic loading of the Xpress library by @sgatto in #3966
- improve performance of Xpress interface and fix bug by @sgatto in #4030
- build(deps): bump jinja2 from 3.1.2 to 3.1.3 in /bazel by @dependabot in #4049
- Include LICENSE file in Python distribution by @chrisjbremner in #4048
New Contributors
- @pjh made their first contribution in #4011
- @sgatto made their first contribution in #3966
- @chrisjbremner made their first contribution in #4048
Full Changelog: v9.8...v9.9
v9.8
Platforms
- Add Python 3.12 support.
- Add Ubuntu 23.10 support.
Dependencies
- abseil-cpp
20230802.1
. - Protobuf
v25.0
. - re2
2023-11-01
. - SCIP
v804
.
Linear Solver
- Port
ModelBuilder
to .Net. - Rename
LogCallback
toMbLogCallback
to avoid collision with SAT LogCallback. - Extend ModelBuilder API:
- Add indicator constraints.
- Add hinting support.
- Add model cloning.
Math Opt
- Deep rework.
Routing
- Add
ROUTING_OPTIMAL
status. - Make
RoutingModel
non copyable nor movable. - Fix some infinite loop in local search operators.
- Add a
PickupDeliveryPosition
internal struct. - Add
IsPickup()
andIsDelivery()
methods.
SAT
- Reduce memory footprint for large model.
- Improved scheduling search.
- add packing_precedences_lns.
- optimize and fix feasibility jump.
- optimize linear presolve and better presolve logging.
- Improve presolve for
int_abs
,int_mod
,int_prod
andlin_max
. - Improve Panda support
- Few bug fix.
Troubleshoot for Distro Maintainers
issue re2::StringPiece
$SRC_DIR/ortools/lp_data/lp_parser.cc: In function 'absl::lts_20230802::StatusOr<operations_research::glop::ParsedConstraint> operations_research::glop::ParseConstraint(absl::lts_20230802::string_view)':
$SRC_DIR/ortools/lp_data/lp_parser.cc:365:20: error: cannot convert 'absl::lts_20230802::string_view*' {aka 'std::basic_string_view<char>*'} to 'operations_research::glop::{anonymous}::StringPiece*' {aka 're2::StringPiece*'}
365 | ConsumeToken(&constraint, &consumed_name, &consumed_coeff);
| ^~~~~~~~~~~
| |
| absl::lts_20230802::string_view* {aka std::basic_string_view<char>*}
answer: You need to bump re2 to at least 2023-06-01
(re2::StringPiece
become an alias to absl::string_view
)
src: google/re2@49d776b
issue operator<<
$PREFIX/include/absl/log/internal/log_message.h:289:17: error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const operations_research::sat::CpSolverResponse')
289 | view.stream() << log_internal::NullGuard<T>().Guard(v);
| ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
answer: You need to bump Protobuf to at least v23.3 (protobuf depends on abseil-cpp)
issue absl::int128
$SRC_DIR/ortools/sat/cuts.cc:79:36: error: no matching function for call to 'StrCat(const char [13], const absl::lts_20230802::int128&, const char [2])'
79 | std::string result = absl::StrCat("CutData rhs=", rhs, "\n");
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
answer: : You need to bump abseil-cpp to at least 20230802.1 (abseil-cpp will provide a int128::toString()
)
src: abseil/abseil-cpp@34eb767
What's Changed
- build(deps): bump tornado from 6.2 to 6.3.3 in /bazel by @dependabot in #3893
- build(deps): bump pygments from 2.14.0 to 2.15.0 in /bazel by @dependabot in #3885
- build(deps): bump jupyter-server from 2.7.0 to 2.7.2 in /bazel by @dependabot in #3904
- Update Visual Studio Version in README.md by @arnabanimesh in #3968
New Contributors
- @dependabot made their first contribution in #3893
- @arnabanimesh made their first contribution in #3968
Full Changelog: v9.7...v9.8
v9.7 (2023/08)
Platforms
- Drop Fedora [33,36] (EOL).
- Drop Centos 8.
- Drop Debian 10.
- Drop Ubuntu 18.04 LTS.
- Drop Python 3.7 support (EOL).
- Disable .Net Core 3.1 (EOL)
Dependencies
- ZLIB
1.2.13
. - abseil-cpp
20230125.3
. - Protobuf
v21.12
->v23.3
. - re2
2023-07-01
. - googletest
v1.13.0
. - Java JNA
5.12.1
->5.13.0
.
Bazel
- Require Bazel 6+.
- Update rules, fix build.
- rules_jvm_external:
4.5
->5.2
- contrib_rules_jvm:
0.9.0
->0.9.0
- rules_python:
0.20.0
->0.23.1
- rules_jvm_external:
Graphs
- Deep Rework.
Model Builder python
- Allow use of Pandas dataframes and series to create variables.
- see assignment
- see bin_packing
- Complete typing information
PDLP
- various update.
CP-SAT
- Performance improvements. (feasibility_jump, lin_max)
- Improve cut management
- New
objective_shaving_search
worker dedicated to improving the lower bound of the objective (when minimizing) - Typing annotations for the python cp_model.py
- Experimental partial support for pandas in cp_model.py
- see assignment
- see bin_packing
- Experimental local search violation based workers:
- enabled with parameters: num_violation_ls:xxx
- optimized for linear model (linear, bool_or, bool_and, at_most_one, exactly_one)
- works correctly with lin_max, product, division
- supports no_overlap, cumulative, circuit, routes
- disabled with no_overlap_2d
- recommended number of ls workers: num_workers -> num_violation_ls (8, 1), (16, 2) (24, 3), (32, 4)
What's Changed
- Ignore the close error when reading fails in file.cc by @ciarand in #3717
- Fix reference to solve_wrapper in Solve method by @djsilcock in #3719
- ensure absolute native library path in Java Loader by @afloren in #3728
- Allow last_variable_index_ to be zero by @rajgoel in #3758
- Xpress fixes by @djunglas in #3576
- Update cplex_interface.cc by @Robot-1x in #3764 #3766
- feat(python): unignore Solver::TopProgressPercent and SearchMonitor::β¦ by @bertuccellimatteo in #3831
- Evaluate LinearExp for the found solution by @koen-lee in #3837
- Fix CMake build in
test
subdirectories by @lnikkila in #3845 - Python CP-SAT type hints by @stradivari96 in #3668
- Fix RUNPATHs for libraries and executables by @StefanBruens in #3383
New Contributors
- @ciarand made their first contribution in #3717
- @djsilcock made their first contribution in #3719
- @afloren made their first contribution in #3728
- @rajgoel made their first contribution in #3758
- @djunglas made their first contribution in #3576
- @Robot-1x made their first contribution in #3764
- @bertuccellimatteo made their first contribution in #3831
Full Changelog: v9.6...v9.7
v9.6 (2023/03)
Platforms
- Add Fedora 37 support.
- Add Fedora 38 support.
- Drop Python 3.6 (not supported by
protobuf
). - Drop Python 3.7 on MacOS (not supported by
scipy
). - Add
net7.0
support - Drop
netcore3.1
in nuget .org packages
Dependencies
- SCIP
v801
->v803
(note: now SCIP use an OSI compatible license) - abseil
20220623.1
->20230105.0
- Protobuf
v21.5
->v21.12
- SWIG
4.1.1
- Java JNA
5.11.0
->5.12.1
PDLP
- Add python wrapper.
CP-SAT
- Performance improvements.
GLOP
- Tweak presolve.
ModelBuilder
- Python: Improve numpy support.
Bazel
- Add pybind11 support.
- Add java wrapper support.
Routing
- Few improvements (local search)
Known Issues:
- CP-SAT: Ignoring
pseudo_costs
subsolver returns Invalid parameters. (#3706) - Maven
ortools-java
package only depends onortools-linux-x86-64
and thus will only work on linux...
v9.5 (2022/11)
Platforms
- Add Debian-SID support (#3457).
- Add Fedora 35 support.
- Add Fedora 36 support.
- Add Ubuntu 22.10.
- Drop Python 3.6 macOS x86_64 (Intel) .
- Add Python 3.11 wheel (#3515).
CP-SAT
- Presolve improvements: max(array), Boolean constraints, linear constraints.
- Interleaved search should be deterministic in parallel.
- Linear cuts: cleanup square and int_prod cuts; rewrite cut pipeline.
- Fingerprint input model and solution (visible in the log).
- Scheduling improvements
- The usual bunch of bugfixes (crash during presolve, crash in cuts, infeasible solutions, model infeasible in LNS).
GLOP
- Speedup by rewriting the linear algebra, as well as the pivot selection rule
Linear Solver
- add
knapsack_interface.cc
. - Move model_builder API under the linear_solver directory (headers and samples).
- Add support for Gurobi 10.
Routing
- Liberate few parser for various routing challenge.
v9.4 (2022/08)
Platforms
- Add Debian-10 support (#3209)
- Add Ubuntu 22.04 LTS support (#3276)
- note: won't have .Net 3.1 support (see: dotnet/core#7038 (comment))
- Remove Ubuntu 21.10 support
Misc
- Split archive by languages and add CMake config to the C++ one (#3200)
Graph
Split ortools.graph.pywrapgraph
into:
ortools.graph.python.linear_sum_assignment
ortools.graph.python.max_flow
ortools.graph.python.min_cost_flow
This allows using numpy to speed up the setup of the problems.
CP-SAT
Some improvement on:
- scheduling (propagation, cuts, lower bounds)
- MaxSAT (presolve, core based heuristics)
- MIP performance (presolve, cuts)
v9.3 (2022/03)
Platform changes
- Drop Debian-10 support
- Drop Ubuntu-16.04 support
- Drop .NET Framework 4.5.2
Dependencies Update
- Add Eigen
3.4.0
. - Add Google re2
2021-11-01
. - Protobuf
3.19.1
->3.19.4
. - SCIP
7.0.1
->v800
Python
- Add pybind11.
Features
- Add PDLP as experimental
- Add MathOpt as experimental.
CP-SAT
- renamed few API for consistency
e.g.LinearExpr.ScalProd
->LinearExpr.WeightedSum
. - Add
AddAtLeastOne
/AddAtMostOne
/AddExactlyOne
methods. - Add
AddMultiplicationConstraint(z, x, y)
in all languages. AddMultipleCircuit()
in all languages
C++
- explicit ctor
IntVar(BoolVar)
- remove
LinearExpr::Add*
and replaced them by operator e.g.LinearExpr +=
- Add arithmetic operators on linear expression
- removed
LinearExpr::BooleanSum/BooleanScalProd
, useSum/WeightedSum
- Add
CpModelBuilder::FixVariable()
which overwrite the domain of the variable to a single value
Java
- Rewrite
LinearExpr
, add a incremental builder class:LinearExpr.newBuilder().add(x).addSum(<array of variables).build()
- Follow C++ API:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
andForbiddenAssignment
now return a specialized class with incremental API to add new variables, terms, demandsβ¦
C#
- Document all methods
- Follow C++ API:
Circuit
,MultipleCircuit
,Cumulative
,Reservoir
,AllowedAssignment
andForbiddenAssignment
now return a specialized class with incremental API to add new variables, terms, demands⦠- Add
LinearExprBuilder
class to build expression incrementally.
Build System
CMake
- Require at least
CMake >= 3.18
Make
- Now use the CMake based build internally.