OR-Tools - Google Optimization Tools
Google's software suite for combinatorial optimization.
Table of Contents
- About OR-Tools
- Codemap
- Installation
- Quick Start
- Documentation
- Contributing
- License
About OR-Tools
Google Optimization Tools (a.k.a., OR-Tools) is an open-source, fast and
portable software suite for solving combinatorial optimization problems.
The suite contains:
- Two constraint programming solver (CP* and CP-SAT);
- Two linear programming solvers (Glop and PDLP);
- Wrappers around commercial and other open source solvers, including mixed
integer solvers;
- Bin packing and knapsack algorithms;
- Algorithms for the Traveling Salesman Problem and Vehicle Routing Problem;
- Graph algorithms (shortest paths, min cost flow, max flow, linear sum
assignment).
We wrote OR-Tools in C++, but provide wrappers in Python, C# and Java.
Codemap
This software suite is composed of the following components:
- Makefile Top-level for
GNU Make based build.
- makefiles Subsidiary Make files, CI and build system documentation.
- CMakeLists.txt Top-level for
CMake based build.
- cmake Subsidiary CMake files, CI and build system documentation.
- WORKSPACE Top-level for
Bazel based build.
- bazel Subsidiary Bazel files, CI and build system documentation.
- ortools Root directory for source code.
- base Basic utilities.
- algorithms Basic algorithms.
- samples Carefully crafted samples.
- graph Graph algorithms.
- samples Carefully crafted samples.
- linear_solver Linear solver wrapper.
- samples Carefully crafted samples.
- glop Simplex-based linear programming solver.
- samples Carefully crafted samples.
- pdlp First-order linear programming solver.
- samples Carefully crafted samples.
- lp_data Data structures for linear models.
- constraint_solver Constraint and Routing
solver.
- docs Documentation of the component.
- samples Carefully crafted samples.
- sat SAT solver.
- docs Documentation of the component.
- samples Carefully crafted samples.
- bop Boolean solver based on SAT.
- util Utilities needed by the constraint solver
- examples Root directory for all examples.
- contrib Examples from the community.
- cpp C++ examples.
- dotnet .Net examples.
- java Java examples.
- python Python examples.
- notebook Jupyter/IPython notebooks.
- flatzinc FlatZinc examples.
- tests Unit tests and bug reports.
- tools Delivery Tools (e.g. Windows GNU binaries, scripts, release dockers)
Installation
This software suite has been tested under:
- Ubuntu 18.04 LTS and up (64-bit);
- Apple macOS Mojave with Xcode 9.x (64-bit);
- Microsoft Windows with Visual Studio 2022 (64-bit).
OR-Tools currently builds with a Makefile, but also provides Bazel and CMake
support.
For installation instructions (both source and binary), please visit
https://developers.google.com/optimization/introduction/installing.
Build from source using Make (legacy)
We provide a Make based build.
Please check the
Make build instructions.
Build from source using CMake
We provide a CMake based build.
Please check the
CMake build instructions.
Build from source using Bazel
We provide a Bazel based build.
Please check the
Bazel build instructions.
Quick Start
The best way to learn how to use OR-Tools is to follow the tutorials in our
developer guide:
https://developers.google.com/optimization/introduction/get_started
If you want to learn from code examples, take a look at the examples in the
examples directory.
Documentation
The complete documentation for OR-Tools is available at:
https://developers.google.com/optimization/
Contributing
The CONTRIBUTING.md file contains instructions on how to
submit the Contributor License Agreement before sending any pull requests (PRs).
Of course, if you're new to the project, it's usually best to discuss any
proposals and reach consensus before sending your first PR.
License
The OR-Tools software suite is licensed under the terms of the Apache License 2.0.
See LICENSE for more information.