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