The Wayback Machine - https://web.archive.org/web/20221028200849/https://github.com/google/or-tools/releases
Skip to content

Releases: google/or-tools

v9.4 (2022/08)

Compare
Choose a tag to compare

Platforms

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)

Compare
Choose a tag to compare

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, use Sum/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 and ForbiddenAssignment 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 and ForbiddenAssignment 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.

v9.2 (2021/12)

Compare
Choose a tag to compare

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 -O1 to 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.
    • AddProductEquality has been removed. Please use AddMultiplicationEquality.
    • Now that we have floating point coefficients for the objective, we have removed ScaleObjectiveBy which had a problematic semantics.
  • New features:
    • The all_different, reservoir, modulo, multiplication and division constraints accept affine expressions (a * var + b) everywhere it required integer variables.
    • The objective accepts floating point coefficients (See the DoubleLinearExpr class in C++/Java/.NET. See the knapsack_2d_sat.py example in Python).
    • The no_overlap_2d constraint supports optional intervals.
    • The C++ API implements + and * operators to build expressions.
  • 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++ BooleanSum and BooleanScalProd. Just use Sum and ScalProd.
    • Removed C++ AddLinMinEquality and AddLinMaxEquality. Just use AddMinEquality and AddMaxEquality.
  • 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_DEPS option (default ON).
  • Add optional support for GPLK solver (default -DUSE_GLPK=OFF).

Python

  • Support numpy integers in most of the CP-SAT API.
  • Fix missing __version__.

v9.1 (2021/09)

Compare
Choose a tag to compare

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 manylinux2014 image (PEP 599).
  • python: add support for aarch64 linux using manylinux2014_aarch64 image.
  • .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 warning in cp_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 the num_search_parameters to specify the level of parallelism.
  • Deprecate SearchAllSolutions and SolveWithSolutionCallback.
  • Python API: more pedantic checks when using var == ... or var != ... outside a model.Add() call.

v9.0 (2021/04)

Compare
Choose a tag to compare

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)

Compare
Choose a tag to compare

Dependency Updates

  • abseil-cpp 20200923.2 -> 20200923.3
  • Protobuf 3.14.0 -> 3.15.3

Routing

  • Expose new APIs:
    • int RegisterUnaryTransitVector(std::vector<int64>) and
    • int RegisterTransitMatrix(std::vector<std::vector<int64>>)
  • Change return of AddVectorDimension() and AddMatrixDimension() to std::pair<int, bool> whose int is the transit evaluator id.

v8.1 (2020-12)

Compare
Choose a tag to compare

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

  • Fix double counting of Gurobi floating license (#2227)
  • Fix windows build (#2200)

v8.0 (2020-10)

Compare
Choose a tag to compare

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::CreateSolver signature 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=OFF and -DBUILD_EXAMPLES=OFF.
    note: can be disable for a specific language using -DBUILD_<LANG>_SAMPLES=OFF or
    -DBUILD_<LANG>_EXAMPLES=OFF (with <LANG> among CXX, PYTHON, JAVA and DOTNET).

Make

  • Require Make >= 4.3 (use of Make eval function).
  • Require CMake >= 3.14 (use of CMake --verbose option).
  • 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

  • Fix C++ and Python build on FreeBSD (#2126).
  • Fix build in debug on windows (#2077).
  • Fix long standing crash in parallel on CP-SAT on Windows (#2001, #2019).

v7.8 (2020-07)

Compare
Choose a tag to compare

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_HOME directory.
  • 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)

Compare
Choose a tag to compare

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