Files
ortools-clone/ortools/linear_solver
StefanBruens 9021ffbb95 Build Python modules as CMake MODULEs (#3259)
Python since 3.8 no longer links to the interpreter library, so
symbols like `PyExc_AttributeError` will be undefined at link time.

This causes build failures when shared libraries are linked with
`-Wl,--no-undefined`. Use `TYPE MODULE` for python extension modules,
which allows to specify distinct flags via CMAKE_MODULE_LINKER_FLAGS
vs CMAKE_SHARED_LINKER_FLAGS. (The same is already used by
`pybind11_add_module(... MODULE ...)`).

Fixes #3258.
2022-04-28 15:50:56 +02:00
..
2022-02-25 23:43:01 +01:00
2022-02-25 23:43:01 +01:00
2022-01-27 16:35:42 +01:00
2022-03-31 15:34:37 +02:00
2022-02-24 08:42:33 +01:00
2021-09-13 13:10:58 +02:00
2022-03-25 15:12:05 +01:00
2022-03-02 22:10:54 +01:00
2022-04-02 23:26:50 +02:00
2022-03-02 22:10:54 +01:00
2022-03-02 22:10:54 +01:00
2022-03-02 22:10:54 +01:00
2022-02-16 16:18:08 +01:00

Linear Programming (LP) and Integer Programming (IP) Solver

Linear optimization problems are common throughout Google, and the Operations Research team has a few ways to help with them.

These models have the form: $$\begin{array}{lll} (P) & \max & cx\ & s.t. & L\leq Ax\leq U\ & & l\leq x\leq u\ & &x_i\in\mathbb{Z}\quad\forall i\in I \end{array}$$

Where A\in\mathbb{R}^{m\times n}, l,u,c\in\mathbb{R}^n, L,U\in\mathbb{R}^m, n,m\in\mathbb{N}^+ and I\subseteq\{1,\ldots,n\}.

This module provides an unified wrapper (MPSolver) around different linear and integer solvers (Glop, Bop, Sat, SCIP, Gurobi etc.).

To begin, skim

  • linear_solver.h: the point of entry for the MPSolver wrapper that provides a simple and unified interface to several linear programming and mixed integer programming solvers.

  • linear_solver.cc: the C++ code of the MPSolver wrapper that is common to all solvers accessible through the wrapper.

Parameters and Solution

MPSolver uses a proto interface MPModelProto.

You can find the protocol buffer definition here:

Available solvers

Each *_interface.cc file corresponds to one of the solver accessible through the wrapper.

  • Google's BOP (boolean) solver: [bop_interface.cc] (../linear_solver/bop_interface.cc)

  • Google's GLOP (lp) solver: [glop_interface.cc] (../linear_solver/glop_interface.cc)

  • Gurobi (MIP) solver: [gurobi_interface.cc] (../linear_solver/gurobi_interface.cc)

  • SCIP (MIP) solver: [scip_interface.cc] (../linear_solver/scip_interface.cc)

  • Google's CP-SAT Solver: [sat_interface.cc] (../linear_solver/sat_interface.cc)

  • Coin-OR Cbc (MIP) solver: [cbc_interface.cc] (../linear_solver/cbc_interface.cc)

  • Coin-OR Clp (LP) solver: [clp_interface.cc] (../linear_solver/clp_interface.cc)

Wrappers

  • python: the SWIG code that makes the wrapper available in Python, and its unit tests.

  • java: the SWIG code that makes the wrapper available in Java, and its unit tests.

  • csharp: the SWIG code that makes the wrapper available in C#, and its unit tests.

Samples

You can find some canonical examples in samples