Package: cylp
CyLPCyLP is a Python interface to COIN-OR’s Linear and mixed-integer program solvers
(CLP, CBC, and CGL). CyLP’s unique feature is that you can use it to alter the
solution process of the solvers from within Python. For example, you may
define cut generators, branch-and-bound strategies, and primal/dual Simplex
pivot rules completely in Python.You may read your LP from an mps file or use the CyLP’s easy modeling
facility. Please find examples in thedocumentation.DockerIf you’re comfortable with Docker, you can get started right away with the container
available on Dockerhub that comes with CyLP pre-installed.https://hub.docker.com/repository/docker/coinor/cylpOtherwise, read on.Prerequisites and installationOn Windows: Installation as a binary wheelOn Windows, a binary wheel is available and it is not necessary to install Cbc.
Just do:$ python -m pip install cylpOn Linux/macOS: Installation as a binary wheelBinary wheels are available for Linux and some versions of OS X
for some versions of Python. To see if there is a wheel available
for your platform, you can browsehttps://pypi.org/project/cylp/#filesor just try:$ python -m pip install cylpIn case this fails, it is most likely that there is no wheel for your platform.
If you are on Linux, this can probably be addressed by switching to
a supported Python version with, e.g., conda:$ conda create -n cylp python=3.9
$ conda activate cylpIf all else fails, it is easy to install from source, but Cbc must be
installed first, as detailed below. The easiest route for this is to use
conda.On Linux/macOS with conda: Installation from sourceCyLP depends onNumPyandCythonas prerequisites for building from source (build-system requires).
You will also need to install binaries for Cbc. The version should be 2.10 (recommended) or earlier
(current master branch of Cbc will not work with this version of CyLP).The following commands will create and activate a new conda environment with all
these prerequisites installed:$ conda create -n cylp coin-or-cbc cython numpy pkg-config scipy -c conda-forge
$ conda activate cylpNow you can install CyLP from PyPI:$ pip install --no-build-isolation cylp(The option–no-build-isolationensures thatcylpuses the Python packages
installed by conda in the build phase.)Alternatively, if you have cloned CyLP from GitHub:$ pip install --no-build-isolation .On Linux/macOS with pip: Installation from sourceFirst of all, you will need to install binaries for Cbc. The version should be 2.10 (recommended) or earlier
(current master branch of Cbc will not work with this version of CyLP).
You can install Cbc by either by installing with your system’s package manager, by downloading pre-built binaries,
or by building yourself from source usingcoinbrew.To install Cbc in Linux, the easiest way is to use a package manager. Installcoinor-libcbc-devon Ubuntu/Debian orcoin-or-Cbc-develon Fedora, or thecorresponding package on your distribution.On macOS, it is easiest to install Cbc with homebrew:$ brew install cbcpkg-configYou should no longer need to build Cbc from source on any platform unless for some reason, none of the
above recipes applies to you. If you do need to build from source, please go to theCbcproject page and follow the instructions there. After building and installing, make sure to
either set theCOIN_INSTALL_DIRvariable to point to the installation or setPKG_CONFIG_PATHto point to
the directory where the.pcfiles are installed. You may also need to set eitherLD_LIBRARY_PATH(Linux)
orDYLD_LIBRARY_PATH(macOS).Next, build and install CyLP:$ python -m pip install cylpThis will build CyLP in an isolated environment that provides the build prerequisites
and install it together with its runtime dependencies (install-requires),
NumPy andSciPy <https://scipy.org>.Testing your installationOptional step:If you want to run the doctests (i.e.make doctestin thedocdirectory)
you should also define:$ export CYLP_SOURCE_DIR=/Path/to/cylpNow you can use CyLP in your python code. For example:>>> from cylp.cy import CyClpSimplex
>>> s = CyClpSimplex()
>>> s.readMps('../input/netlib/adlittle.mps')
0
>>> s.initialSolve()
'optimal'
>>> round(s.objectiveValue, 3)
225494.963Or simply go to CyLP and run:$ python -m unittest discoverto run all CyLP unit tests (this is currently broken).Modeling ExampleHere is an example of how to model with CyLP’s modeling facility:import numpy as np
from cylp.cy import CyClpSimplex
from cylp.py.modeling.CyLPModel import CyLPArray

s = CyClpSimplex()

# Add variables
x = s.addVariable('x', 3)
y = s.addVariable('y', 2)

# Create coefficients and bounds
A = np.matrix([[1., 2., 0],[1., 0, 1.]])
B = np.matrix([[1., 0, 0], [0, 0, 1.]])
D = np.matrix([[1., 2.],[0, 1]])
a = CyLPArray([5, 2.5])
b = CyLPArray([4.2, 3])
x_u= CyLPArray([2., 3.5])

# Add constraints
s += A * x <= a
s += 2 <= B * x + D * y <= b
s += y >= 0
s += 1.1 <= x[1:3] <= x_u

# Set the objective function
c = CyLPArray([1., -2., 3.])
s.objective = c * x + 2 * y.sum()

# Solve using primal Simplex
s.primal()
print(s.primalVariableSolution['x'])This is the expected output:Clp0006I 0  Obj 1.1 Primal inf 2.8999998 (2) Dual inf 5.01e+10 (5) w.o. free dual inf (4)
Clp0006I 5  Obj 1.3
Clp0000I Optimal - objective value 1.3
[ 0.2  2.   1.1]DocumentationYou may access CyLP’s documentation:Online: Please visithttp://coin-or.github.io/CyLP/Offline: To install CyLP’s documentation in your repository, you need
Sphinx (https://www.sphinx-doc.org/). You can generate the documentation by
going to cylp/doc and runmake htmlormake latexand access the
documentation under cylp/doc/build. You can also runmake doctestto
perform all the doctest.Who uses CyLPThe following software packages make use of CyLP:CVXPY, a Python-embedded modeling language for
convex optimization problems, uses CyLP for interfacing to CBC, which is one
of thesupported mixed-integer solvers.CyLP has been used in a wide range of practical and research fields. Some of the users include:PyArt, The Python ARM Radar Toolkit,
used by Atmospheric Radiation Measurement (U.S. Department of energy).Meteorological Institute University of Bonn.Sherbrooke university hospital (Centre hospitalier universitaire de Sherbrooke): CyLP is used for nurse scheduling.Maisonneuve-Rosemont hospital (L’hôpital HMR): CyLP is used for  physician scheduling with preferences.Lehigh University: CyLP is used to teach mixed-integer cuts.IBM T. J. Watson research centerSaarland University, Germany