Skip to main content

A Python interface for CLP, CBC, and CGL

Project description

Important Notice

To comply with PEP8 we decided to rename the package name from CyLP to cylp, which was long overdue. It affects the package name ONLY and a simple replace can make your program work with the new settings. Thank you for your understanding.

What is CyLP?

CyLP 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 the documentation.

Who uses CyLP

CyLP is being used in a wide range of practical and research fields. Some of the users include:

  1. PyArt, The Python ARM Radar Toolkit, used by Atmospheric Radiation Measurement (U.S. Department of energy). https://github.com/ARM-DOE/pyart

  2. Meteorological Institute University of Bonn.

  3. Sherbrooke university hospital (Centre hospitalier universitaire de Sherbrooke): CyLP is used for nurse scheduling.

  4. Maisonneuve-Rosemont hospital (L’hôpital HMR): CyLP is used for physician scheduling with preferences.

  5. Lehigh University: CyLP is used to teach mixed-integer cuts.

  6. IBM T. J. Watson research center

  7. Saarland University, Germany

Installation

STEP 1:

Install CBC (http://www.coin-or.org/download/source/Cbc/). CyLP can be compiled against Cbc version 2.8.5. Please go to the installation directory and run:

$ ./configure
$ make
$ make install
STEP 2:

Create an environment variable called COIN_INSTALL_DIR pointing to your installation of Coin. For example:

$ export COIN_INSTALL_DIR=/Users/mehdi/Cbc-2.8.5

You may also add this line to your ~/.bash_rc or ~/.profile to make it persistent.

STEP 3:

Install CyLP. Go to CyLP’s root directory and run:

$ python setup.py install
STEP 4 (LINUX):

In linux you might also need to add COIN’s lib directory to LD_LIBRARY_PATH as follows:

$ export LD_LIBRARY_PATH=/path/to/Cbc-2.8.5/lib:$LD_LIBRARY_PATH"
Optional step:

If you want to run the doctests (i.e. make doctest in the doc directory) you should also define:

$ export CYLP_SOURCE_DIR=/Path/to/cylp

Now 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.963

Or simply go to CyLP and run:

$ python -m unittest discover

to run all CyLP unit tests.

Modeling Example

Here 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']

Documentation

You may access CyLP’s documentation:

  1. Online : Please visit http://mpy.github.io/cylpdoc/

  2. Offline : To install CyLP’s documentation in your repository, you need Sphinx (http://sphinx.pocoo.org/). You can generate the documentation by going to cylp/doc and run make html or make latex and access the documentation under cylp/doc/build. You can also run make doctest to perform all the doctest.

Bitdeli badge githalytics.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cylp-0.2.3.2.tar.gz (1.0 MB view details)

Uploaded Source

Built Distributions

cylp-0.2.3.2-py2.7-macosx-10.6-x86_64.egg (874.6 kB view details)

Uploaded Egg

cylp-0.2.3.2-py2.7-linux-i686.egg (4.0 MB view details)

Uploaded Egg

File details

Details for the file cylp-0.2.3.2.tar.gz.

File metadata

  • Download URL: cylp-0.2.3.2.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for cylp-0.2.3.2.tar.gz
Algorithm Hash digest
SHA256 71b63badc140dd83d33dcbbaf1ec45dfc459f53aa3922debcd1f12fe8dee3373
MD5 265363e30705408b01411692fc62df41
BLAKE2b-256 4b7f89854b5fe276f93036232aa1371d9adc06a5d88ad0d5d0cddefabea4e7b3

See more details on using hashes here.

File details

Details for the file cylp-0.2.3.2-py2.7-macosx-10.6-x86_64.egg.

File metadata

File hashes

Hashes for cylp-0.2.3.2-py2.7-macosx-10.6-x86_64.egg
Algorithm Hash digest
SHA256 68f55cbdb7c28eeca894e2c694edf923070adfd230111523c445f673369461e7
MD5 62e0dd4ed0c6b5bf61ff7ef2a676aca1
BLAKE2b-256 914f488688959c4bafee8abdc75c65b8c4438fb3ee1e470daa43bf78c2415793

See more details on using hashes here.

File details

Details for the file cylp-0.2.3.2-py2.7-linux-i686.egg.

File metadata

File hashes

Hashes for cylp-0.2.3.2-py2.7-linux-i686.egg
Algorithm Hash digest
SHA256 eb52c6e8930edbdb1220201ba90cca67eed364289b36e8f0c0ab7fe8087f3232
MD5 fdacec50833d4b7dd7946fcd4e91b505
BLAKE2b-256 47a7053ac8ea7f3f53a93e2b823b8699d3dc655fd616b8fa5bc2d72637ba10a1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page