google/or-tools

GitHub: google/or-tools

Google 开源的组合优化软件套件,提供约束规划、线性规划、车辆路径、图算法等多种求解器,用于高效解决物流调度、排班排产、资源分配等复杂优化问题。

Stars: 13587 | Forks: 2406

# OR-Tools - Google 优化工具 [![PyPI version](https://img.shields.io/pypi/v/ortools.svg)](https://pypi.org/project/ortools/) [![PyPI download](https://img.shields.io/pypi/dm/ortools.svg)](https://pypi.org/project/ortools/#files) \ [![NuGet version](https://img.shields.io/nuget/v/Google.OrTools.svg)](https://www.nuget.org/packages/Google.OrTools) [![NuGet download](https://img.shields.io/nuget/dt/Google.OrTools.svg)](https://www.nuget.org/packages/Google.OrTools) \ [![Maven Central](https://img.shields.io/maven-central/v/com.google.ortools/ortools-java)](https://mvnrepository.com/artifact/com.google.ortools/ortools-java) \ [![Discord](https://img.shields.io/discord/693088862481678374?color=7289DA&logo=discord&style=plastic)](https://discord.gg/ENkQrdf) Google 的组合优化软件套件。 ## 目录 * [关于 OR-Tools](#about) * [代码地图](#codemap) * [安装说明](#installation) * [快速入门](#quick-start) * [文档](#documentation) * [贡献](#contributing) * [开源许可证](#license) ## 关于 OR-Tools Google 优化工具(又称 OR-Tools)是一个开源、快速且可移植的软件套件,用于解决组合优化问题。 该套件包含: * 两个约束规划求解器(CP* 和 CP-SAT); * 两个线性规划求解器(Glop 和 PDLP); * 针对商业及其他开源求解器的封装,包括混合整数求解器; * 装箱和背包算法; * 旅行商问题和车辆路径问题的算法; * 图算法(最短路径、最小费用流、最大流、线性求和分配)。 我们使用 C++ 编写 OR-Tools,但也提供了 Python、C# 和 Java 的封装。 ## 代码地图 本软件套件由以下组件构成: * [Makefile](Makefile) 基于 [GNU Make](https://www.gnu.org/software/make/manual/make.html) 构建的顶级文件。 * [makefiles](makefiles) 辅助 Make 文件、CI 和构建系统文档。 * [CMakeLists.txt](CMakeLists.txt) 基于 [CMake](https://cmake.org/cmake/help/latest/) 构建的顶级文件。 * [cmake](cmake) 辅助 CMake 文件、CI 和构建系统文档。 * [WORKSPACE](WORKSPACE) 基于 [Bazel](https://bazel.build/start/bazel-intro) 构建的顶级文件。 * [bazel](bazel) 辅助 Bazel 文件、CI 和构建系统文档。 * [ortools](ortools) 源代码根目录。 * [base](ortools/base) 基础工具。 * [algorithms](ortools/algorithms) 基础算法。 * [samples](ortools/algorithms/samples) 精心制作的示例。 * [graph](ortools/graph) 图算法。 * [samples](ortools/graph/samples) 精心制作的示例。 * [linear_solver](ortools/linear_solver) 线性求解器封装。 * [samples](ortools/linear_solver/samples) 精心制作的示例。 * [glop](ortools/glop) 基于单纯形法的线性规划求解器。 * [samples](ortools/glop/samples) 精心制作的示例。 * [pdlp](ortools/pdlp) 一阶线性规划求解器。 * [samples](ortools/pdlp/samples) 精心制作的示例。 * [lp_data](ortools/lp_data) 线性模型的数据结构。 * [constraint_solver](ortools/constraint_solver) 约束和路径规划 求解器。 * [docs](ortools/constraint_solver/docs) 组件文档。 * [samples](ortools/constraint_solver/samples) 精心制作的示例。 * [sat](ortools/sat) SAT 求解器。 * [docs](ortools/sat/docs) 组件文档。 * [samples](ortools/sat/samples) 精心制作的示例。 * [bop](ortools/bop) 基于 SAT 的布尔求解器。 * [util](ortools/util) 约束求解器所需的工具 * [examples](examples) 所有示例的根目录。 * [contrib](examples/contrib) 社区提供的示例。 * [cpp](examples/cpp) C++ 示例。 * [dotnet](examples/dotnet) .Net 示例。 * [java](examples/java) Java 示例。 * [python](examples/python) Python 示例。 * [notebook](examples/notebook) Jupyter/IPython 笔记本。 * [flatzinc](examples/flatzinc) FlatZinc 示例。 * [tools](tools) 交付工具(例如 Windows GNU 二进制文件、脚本、发布用 Docker) ## 安装说明 本软件套件已在以下环境中测试: * Ubuntu 18.04 LTS 及更高版本(64 位); * 搭载 Xcode 9.x 的 Apple macOS Mojave(64 位); * 搭配 Visual Studio 2022 的 Microsoft Windows(64 位)。 OR-Tools 目前使用 Makefile 构建,但也提供 Bazel 和 CMake 支持。 有关安装说明(源代码和二进制文件),请访问 https://developers.google.com/optimization/introduction/installing。 ### 使用 Make 从源代码构建(旧版) 我们提供基于 Make 的构建。
请查阅 [Make 构建说明](makefiles/README.md)。 ### 使用 CMake 从源代码构建 我们提供基于 CMake 的构建。
请查阅 [CMake 构建说明](cmake/README.md)。 ### 使用 Bazel 从源代码构建 我们提供基于 Bazel 的构建。
请查阅 [Bazel 构建说明](bazel/README.md)。 ## 快速入门 学习如何使用 OR-Tools 的最佳方式是遵循我们开发者指南中的教程: https://developers.google.com/optimization/introduction/get_started 如果您想通过代码示例学习,请查看 [examples](examples) 目录中的示例。 ## 文档 OR-Tools 的完整文档可在以下网址找到: https://developers.google.com/optimization/ ## 贡献 [CONTRIBUTING.md](CONTRIBUTING.md) 文件包含了在发送任何 Pull Request (PR) 之前如何提交贡献者许可协议的说明。 当然,如果您是该项目的新手,通常最好在发送第一个 PR 之前先讨论任何提议并达成共识。 ## 开源许可证 OR-Tools 软件套件根据 Apache License 2.0 的条款授权。
有关更多信息,请参阅 [LICENSE](LICENSE)。
标签:Bash脚本, C++, CP-SAT, Glop, JS文件枚举, PDLP, Python, TSP, VRP, 优化工具, 图算法, 开源库, 搜索引擎爬虫, 数据擦除, 整数规划, 旅行商问题, 无后门, 最大流, 最小费用流, 最短路径, 约束规划, 线性规划, 组合优化, 背包问题, 装箱算法, 谷歌, 车辆路径问题, 运筹学, 逆向工具