Google OrTools Changelog

What's new in Google OrTools 9.9.3963

Mar 12, 2024
  • 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 in Google OrTools 9.8.3296 (Nov 16, 2023)

  • Platform changes:
  • Add Python 3.12.
  • Add support for Ubuntu 23.10
  • Linear Solver:
  • Port ModelBuilder to .Net.
  • Rename LogCallback to MbLogCallback 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() and IsDelivery() 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 and lin_max.
  • Improve Panda support
  • Few bug fix.

New in Google OrTools 9.7.2996 (Aug 8, 2023)

  • 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
  • Graphs:
  • Deep Rework.
  • Model Builder python:
  • Allow use of Panda array as input.
  • 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
  • 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 in Google OrTools 9.6.2534 (Mar 13, 2023)

  • 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
  • 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)

New in Google OrTools 9.5.2237 (Nov 28, 2022)

  • Linear Solver:
  • add knapsack_interface.cc.
  • Move model_builder API under the linear_solver directory (headers and samples).
  • Routing:
  • Liberate few parser for various routing challenge.
  • 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

New in Google OrTools 9.4.1874 (Aug 12, 2022)

  • Platforms:
  • Add Debain-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)
  • CP-SAT:
  • Some improvement on:
  • scheduling (propagation, cuts, lower bounds)
  • MaxSAT (presolve, core based heuristics)
  • MIP performance (presolve, cuts)

New in Google OrTools 9.3 (Mar 17, 2022)

  • Platform changes:
  • Drop Debian-10 support
  • Drop Ubuntu-16.04 support
  • 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

New in Google OrTools 9.2 (Dec 16, 2021)

  • 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.
  • 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__.

New in Google OrTools 9.1 (Oct 1, 2021)

  • Platform changes:
  • Ubuntu 16.04 LTS is deprecated (actions/virtual-environments#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
  • Features/Fix:
  • java: Fix jvm GC crash when routing model or the constraint solver were disposed (#2091, #2466).
  • java: improve robustness of the native library loader (#2742).
  • java: 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.

New in Google OrTools 9.0 (May 1, 2021)

  • 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::vectorstd::string support (#2453)
  • Makefile:
  • Rework CPLEX support (#2470)

New in Google OrTools 8.1 (Dec 10, 2020)

  • 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 (replace by abseil-cpp flags component)
  • Bug Fixes:
  • Fix double counting of Gurobi floating license (#2227)
  • Fix windows build (#2200)

New in Google OrTools 8.0 (Oct 11, 2020)

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

New in Google OrTools 7.8 (Aug 4, 2020)

  • Dependency updates:
  • Integrate SCIP 7.0.1 in prebuilt artifacts.
  • Fix support for optional solver XPRESS 8.9.0
  • 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().

New in Google OrTools 7.7 (Jun 12, 2020)

  • 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

New in Google OrTools 7.6 (Apr 24, 2020)

  • Dependency updates:
  • Abseil-cpp 8ba96a8 -> b832dce (LTS 20200225)
  • CP-SAT Update:
  • Improve cut management
  • Add debugging tools
  • Fix UNSAT bug in presolve (see #1908)
  • Bug fixes:
  • Fix swigwin.exe url
  • Fix swig typemap management for Java and .Net

New in Google OrTools 7.5 (Jan 28, 2020)

  • Dependency updates:
  • Protobuf 3.10.0 -> 3.11.2 (#1829)
  • Bugfixes:
  • The usual bunch of fixes and performances improvements (See Milestone v7.5)
  • In particular:
  • Fixing Assembly loading see #1421 (comment)
  • Expose the GetStartIndex and GetEndIndex methods of RouteIndexManager (#1843)
  • Cleanup SWIG to remove broken methods (#1838, #1276).

New in Google OrTools 7.1 (May 9, 2019)

  • Updates to required dependencies:
  • Glog 0.3.5 -> 0.4.0
  • Protobuf 3.6.1 -> 3.7.1
  • Cbc 2.9.9 -> 2.10.1
  • Cgl 0.59.10 -> 0.60.1
  • Clp 1.16.11 -> 1.77.1
  • Osi 0.107.9 -> 0.108.1
  • Coinutils 2.10.14 -> 2.11.1
  • CP-SAT:
  • Rework wrapped API in Python, Java and .Net.
  • see doc here
  • Added Support:
  • Fix SWIG 4.0 compatibility.

New in Google OrTools 7.0 (Mar 26, 2019)

  • Updates to required dependencies:
  • GFlags 2.2.1 -> 2.2.2
  • New required dependencies:
  • Added abseil-cpp (set to SHA1:bf29470) as required dependency.
  • Python:
  • WARNING Manylinux ortools wheel package have been build against manylinux2010 (see PEP 571) since abseil-cpp require glibc >= 2.12. But since pip does not support manylinux2010 platform compatibility tag yet, package and platform tag has been reset to manylinux1 (see PEP 513).
  • Bugfix:
  • Rename few enum after windows clash (e.g. DeleteFile, FLOAT are macro in MSVC).
  • Fix utils/file_nonport compilation on windows.
  • Remove non compact table constraints in the original CP solver.
  • Add optional_boolean sub-proto.
  • Fix ownership for callback in Java and .Net.
  • Drop Support:
  • Drop support of Visual C++ 2015:
  • Visual C++ 2015 is no longer able to compile OR-Tools source code.
  • Routing:
  • Use of IndexManager to do the conversion between NodeIndex and Index for all API.
  • All Java API are now in conformance with the Google Java Style Guide (i.e. lower camel case for methods).
  • Expose enum class PickupAndDeliveryPolicy in all languages, sample here
  • Now, transit callback must be registered first, then you must use the associated id in AddDimension()/SetArcCostXXX()
  • Here some examples:
  • tsp.py
  • tsp.cc
  • Tsp.java
  • Tsp.cs
  • Change callback API:
  • Add support for lambda callback in .Net using delegate function.
  • Add support for lambda callback in Java using @functionalInterface.

New in Google OrTools 7.0 Beta (Dec 28, 2018)

  • Updates to required dependencies:
  • GFlags 2.2.1 -> 2.2.2
  • Added abseil-cpp (set SHA1 to 45221cc + CMake patch) as required dependency.
  • Drop Support:
  • Drop support of VS 2015
  • Drop support of Python 3.4 on Linux since abseil-cpp headers conflict with Python.h include see abseil-cpp #235
  • Python:
  • WARNING Manylinux ortools wheel package have been build against manylinux2010 (see PEP 571) since abseil-cpp require glibc >= 2.12. But since pip does not support manylinux2010 platform compatibility tag yet, package and platform tag has been reset to manylinux1.
  • Since it is a pre-release to install binary you must use:
  • python -m pip install --user ortools==7.0b6150
  • otherwise last stable version v6.10 will be installed...
  • Routing:
  • Use of IndexManager to do the conversion between NodeIndex and Index
  • Now, transit callback are registered first, then you must use the associated id in AddDimension()
  • Here some examples:
  • tsp.py
  • tsp.cc
  • Tsp.java
  • tsp.cs
  • Bugfix:
  • Rename few enum after windows clash (e.g. NO_ERROR is a macro on MSVC)
  • Fix utils/file_nonport compilation on windows
  • Remove non compact table constraints
  • Add optional_boolean sub-proto

New in Google OrTools 6.9 (Sep 20, 2018)

  • Updated dependencies:
  • Protobuf 3.5.1 -> 3.6.1
  • [Optional] SCIP 4.0 -> 6.0
  • CP-SAT:
  • Breaking change API. Full documentation here.
  • Expose ModelStats and CpSolverResponseStats in Python, Java and C#.
  • Rename SolveWithSolutionObserver to SolveWithSolutionCallback in Python (#841).
  • Rename NewSolution to OnSolutionCallback on solution callback in Python.
  • Make sure to call super in __init__ e.g.:
  • class MySolutionCallback(cp_model.CpSolverSolutionCallback):
  • def __init__(self):
  • cp_model.CpSolverSolutionCallback.__init__(self)
  • self.__solution_count = 0
  • def OnSolutionCallback(self):
  • print('Solution {}, time = {}s, objective = {}, makespan = {}'.format(
  • self.__solution_count,
  • self.WallTime(),
  • self.ObjectiveValue(),
  • self.Value(makespan)))
  • self.__solution_count += 1
  • Expose StopSearch on solution callback in Python, Java and C#. Documentation here.
  • Improve Python docstring documentation. Documentation here.
  • Complete Java implementation of the solver interface and cookbook updated.
  • Implement modulo.
  • Change implementation of reservoir: Add API with boolean to specify optional draining/filling events.
  • Linear Solver:
  • Expose InterruptSolve in Java and C#.
  • Constraint Solver:
  • Expose SolutionCollector director in C#.
  • Python:
  • Add support for Python 3.7.
  • When compiling from source: prefer python3 over python2 when detecting python.
  • .Net:
  • Complete rewrite of the .NET layer.
  • Provide a Google.OrTools NetStandard 2.0 Nuget package compatible with Runtime IDentifier win-x64, linux-x64 and osx-x64.
  • Provide a Google.OrTools.FSharp Nuget package.
  • Add project file for all .Net examples.
  • Update all F# script examples (.fsx) to regular F# project (.fs).
  • Add documentation on .Net package build generation here.
  • Flatzinc:
  • Add support for sets in Flatzinc (using nosets.mzn)
  • Contributions:
  • Add support for Binder Thanks to Kevin Mader.
  • Make DecisionVisitor a director type in Java bindings Thanks to Jeremy Apthorp.
  • Full list of commits since v6.8 here

New in Google OrTools 6.8 (Jul 25, 2018)

  • CP-SAT various bug fixes, performance improvements, and doc updates
  • GLOP performance improvements
  • Use dynamic dependencies on UNIX (#697)
  • Use Cbc from github mirror (#684)
  • now depends on cbc, cgl, clp, osi and coinnutils github repos
  • Rework and fix some VRP python examples.
  • Migration to netstandard2.0 for .Net support (#668)
  • i.e. use of dotnet cli instead of mono/msc/fsharpc (not needed anymore)
  • /! require .NetCore SDK >= 302 /!
  • Now install_cc use $(DESTDIR)$(prefix) as destination prefix (prefix = /usr/local on UNIX)
  • Add install_python target in Makefile to pip install locally build python package
  • Makefile cleaning: should be more robust
  • docker rework and add tests to check archives
  • Remove data example from archive
  • add data archive
  • Rework archive Makefile
  • add detect, test_cc, test_java, test_dotnet, cc, java, dotnet targets like the Makefile(s) used to build from source

New in Google OrTools 6.7.2 Pre-release (Jun 6, 2018)

  • Don't use rm on windows when checking shell
  • Replace some CHECK_NOTNULL by CHECK
  • Fixing all remaining StrCat -> absl::StrCat
  • Fix all remaining StrAppend -> absl::StrAppend
  • Fix compile error in flexible_jobshop.cc
  • Fix missing ph.h files in archive
  • Fix missnamed mono binary in osx binary dist Makefile

New in Google OrTools 6.7.1 (May 2, 2018)

  • Fix Protobuf version on UNIX: ~v3.1.0-alpha-1 (3d9d1a1255) -> v3.5.1