Releases: google/or-tools
Releases · google/or-tools
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 LTS 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_assignmentortools.graph.python.max_flowortools.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/AddExactlyOnemethods. - 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,AllowedAssignmentandForbiddenAssignmentnow return a specialized class with incremental API to add new variables, terms, demands…
C#
- Document all methods
- Follow C++ API:
Circuit,MultipleCircuit,Cumulative,Reservoir,AllowedAssignmentandForbiddenAssignmentnow return a specialized class with incremental API to add new variables, terms, demands… - Add
LinearExprBuilderclass to build expression incrementally.
Build System
CMake
- Require at least
CMake >= 3.18
Make
- Now use the CMake based build internally.
v9.2 (2021/12)
Platform changes
- Add support for Ubuntu 21:10 (last rolling release).
Dependencies Update
- .Net TFM update
net5.0->net6.0(need .Net SDK 6.0 LTS and .Net SDK 3.1 LTS). - abseil-cpp
20210324.2->20211102.0. - Protobuf
3.18.0->3.19.1. - Googletest
1.10.0->1.11.0. - Python: add
numpy >= 1.13.3. - On MacOS compile Coin-OR in
-O1to avoid crash in runners.
Routing
- Improvement on filters.
- Improve first solution heuristics.
- Improve time break placements.
CP-SAT
- Breaking changes:
- The underlying protocol buffer is incompatible with previous versions. Any stored protocol buffer will have to be re-generated with the updated builder APIs (in C++, Python, Java, and .NET)
- In particular, the interval protobuf was clean as we removed the old fields (start, size, and end) and renamed the new ones (using
_view) to use the name of the removed fields. AddProductEqualityhas been removed. Please useAddMultiplicationEquality.- Now that we have floating point coefficients for the objective, we have removed
ScaleObjectiveBywhich had a problematic semantics.
- New features:
- The
all_different,reservoir,modulo,multiplicationanddivisionconstraints accept affine expressions (a * var + b) everywhere it required integer variables. - The objective accepts floating point coefficients (See the
DoubleLinearExprclass in C++/Java/.NET. See theknapsack_2d_sat.pyexample in Python). - The
no_overlap_2dconstraint supports optional intervals. - The C++ API implements
+and*operators to build expressions.
- The
- Improvements:
- Improved presolve code.
- Tighter model checker.
- Rework reservoir constraint.
- Add energetic cuts for the no_overlap_2d constraint.
- Improved linear relaxation of encoding constraints (
literal implies var == value).
- Deprecated and removed methods
- Deprecated C++
BooleanSumandBooleanScalProd. Just useSumandScalProd. - Removed C++
AddLinMinEqualityandAddLinMaxEquality. Just useAddMinEqualityandAddMaxEquality.
- Deprecated C++
- Future incompatibilities
- At some point in the future, we will rewrite the Java modelling layer to be closer to the C++ layer.
- In the C++ modelling layer, we will make the IntVar(BoolVar var) ctor explicit.
- We are contemplating making the python API PEP 8 compliant (using snake_case names). If this happen, we will provide a sed file to port the code.
Build System
Bazel
- Fix Windows build.
CMake
- Add
FETCH_PYTHON_DEPSoption (defaultON). - Add optional support for GPLK solver (default
-DUSE_GLPK=OFF).
Python
- Support
numpyintegers in most of the CP-SAT API. - Fix missing
__version__.
v9.1 (2021/09)
Platform changes
- Ubuntu 16.04 LTS is deprecated (actions/runner-images#3287).
- Add support for Debian 11 (Bullseye).
- Add support for Fedora 34.
- python: use
manylinux2014image (PEP 599). - python: add support for aarch64 linux using
manylinux2014_aarch64image. - .Net: add .Net5 support.
Dependencies Update
- abseil-cpp
20210324.1->20210324.2. - Protobuf
3.15.8->3.18.0. - SCIP
7.0.1->master. - Googletest
1.8.0->1.10.0. - python: use of
warningincp_model.py(#2530). - python: absl-py
0.11->0.13.
CMake
- Bump minimum version required 3.14 -> 3.15 (#2528).
- python: bump minimum required version 3.14 -> 3.18 (#2774).
Make
- Make based build is deprecated please migrate to Bazel or CMake
Java
- Improve robustness of the native library loader (#2742).
- Fix jvm GC crash when routing model or the constraint solver were disposed (#2091, #2466).
- Fix CP-SAT logging callback crash when using multiple workers (#2775).
CP-SAT
- Improve robustness of the LNS code (see #2525).
- Improve scheduling code: new factory methods to create fixed size intervals,
new search heuristics, improved presolve and new linear cuts. - Improve routing code: new dedicated LNS.
- Improve model checker. It is now more pedantic, especially w.r.t. potential overflows.
- Improve MIP code: better presolve and multiple improvements to the linear relaxation of MIP
and CP models. - Improve search diversity. When using more than 12 workers, add workers dedicated to
improving the lower bound of the objective. - Change to the parallelism code: by default, the solver will now use all available cores.
Use thenum_search_parametersto specify the level of parallelism. - Deprecate
SearchAllSolutionsandSolveWithSolutionCallback. - Python API: more pedantic checks when using
var == ...orvar != ...outside amodel.Add()call.
v9.0 (2021/04)
Platform changes
- Added support for Centos-7 (#2498)
Dependencies Update
- abseil-cpp 20200923.3 -> 20210324.1 (#2523)
- Protobuf 3.15.3 -> 3.15.8 (#2524)
- Java: jna-platform 5.5.0 -> 5.8.0 (#252)
Features/Fix
- Improve multi-threading when using CP-SAT solver (#1588)
- Add logger access support in Python, Java and .Net (#2245)
- C++: Replace Google type
[u]int(16|32|64)by cstdint ones (e.g.uint64_t) - Python: Fix
std::vector<std::string>support (#2453)
Makefile
- Rework CPLEX support (#2470)
v8.2 (2021/03)
Dependency Updates
- abseil-cpp 20200923.2 -> 20200923.3
- Protobuf 3.14.0 -> 3.15.3
Routing
- Expose new APIs:
int RegisterUnaryTransitVector(std::vector<int64>)andint RegisterTransitMatrix(std::vector<std::vector<int64>>)
- Change return of
AddVectorDimension()andAddMatrixDimension()tostd::pair<int, bool>whoseintis the transit evaluator id.
v8.1 (2020-12)
Dependency Updates
- abseil-cpp 20200923 -> 20200923.2
- Protobuf 3.13.0 -> 3.14.0
- Add support for Gurobi 9.1.0
- drop Glog dependency (replaced by a custom implementation depending on abseil-cpp flags)
- drop Gflag dependency (replaced by abseil-cpp flags component)
Bug Fixes
v8.0 (2020-10)
Dependency updates
- abseil-cpp 20200225.2 -> 20200923
- Protobuf 3.12.2 -> 3.13.0
Platform changes
- Added support for Python3.9 (#2187)
- Dropped support for Python3.5 (#2186)
- Added support for Ubuntu 20.10 (#2188)
- Dropped support for Ubuntu 16.04 LTS and Ubuntu 19.10 (#2188)
Known Breaking Change
- Since last synchronization with Google internal code base, now Routing and SAT (i.e. OR-Tools) use some C++17.
WARNING: If you provide your own version of abseil-cpp please verify it is built against C++17 too. - The
MPSolver::CreateSolversignature has been changed. The model name argument has been dropped.
CMake
- Fix disabling SCIP support when using
-DUSE_SCIP=OFF(#2129) - Integrate samples and examples to the CMake build system.
note: can be disable by using-DBUILD_SAMPLES=OFFand-DBUILD_EXAMPLES=OFF.
note: can be disable for a specific language using-DBUILD_<LANG>_SAMPLES=OFFor
-DBUILD_<LANG>_EXAMPLES=OFF(with<LANG>amongCXX,PYTHON,JAVAandDOTNET).
Make
- Require
Make >= 4.3(use of Make eval function). - Require
CMake >= 3.14(use of CMake--verboseoption). - Add option to disable SCIP support using
USE_SCIP=OFF(#2134) - Add option to disable CLP and CBC support using
USE_COINOR=OFF
Java
- OR-Tools now generate maven packages (#202).
Bug fixes
v7.8 (2020-07)
Dependency updates
- Gurobi 9.0.2 is now pre-integrated in prebuilt binaries. It will search for the gurobi 90 shared library in the default install path of the Gurobi installers on MAC OS X and Windows, or in the
GUROBI_HOMEdirectory. - SCIP 7.0.1 is now integrated in prebuilt binaries.Please ensure compliance with the SCIP license before using it.
- Added support for optional Xpress Solver 8.9.0.
Linear Solver
- Added a static
LinearSolver::CreateSolver()method to simplify checking support for integrated linear solver backends. It works in all languages.
CMake
- Fix and add support for FreeBSD (#2105)
- Use of
FetchContent()to build dependencies - Use of CMP0091 to control Runtime Library on Windows
Bazel
- Cleanup protobuf usage.
Bug fixes
- CP-SAT: Fix sorting in cumulative cut generation.
- Linear Solver: Fix leak in .Net wrapper when using
CreateSolver().
v7.7 (2020-06)
Dependency updates
- Abseil-cpp 20200225 -> 20200225.2
- Protobuf 3.11.4 -> 3.12.2
- bazel-skylib 0.8.0 -> 1.0.2 (for bazel based build)
- Fix optional SCIP 7.0 support
CP-SAT Update
- Now, the solver returns Optimal instead of Feasible in a satisfiability model (i.e. without objective)
- Fix multi-threading crash (#2005)
- Improve feasibility pump
CMake
- Add maven package generation (#202)
- Fix Windows build

