CyLP is a Python interface to COIN-OR’s Linear and mixed-integer program solvers (CLP, CBC, and CGL)

Overview

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.

Docker

If 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/cylp

Otherwise, read on.

Prerequisites

CyLP depends on Numpy (www.numpy.org) and Scipy (www.scipy.org). Please note that Numpy does need to be installed prior to installing CyLP, even though it is listed as a dependency in the setup.py file.

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). You can install Cbc by either by installing with a package manager, by downloading pre-built binaries, or by building yourself from source using coinbrew.

  1. To install Cbc in Linux, the easiest way is to use a package manager. Install coinor-libcbc-dev on Ubuntu/Debian or coin-or-Cbc-devel on Fedora. Cbc is also available on Linux through conda with

    $ conda create -n cbc coin-or-cbc -c conda-forge

  2. On OS X, it is easiest to install Cbc with homebrew:

    $ brew tap coin-or-tools/coinor

    $ brew install coin-or-tools/coinor/cbc pkg-config

    Cbc is also available on OS X through conda with

    $ conda create -n cbc coin-or-cbc -c conda-forge

  3. On Windows, a binary wheel is available and it is not necessary to install Cbc.

You 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 the Cbc project page and follow the instructions there. After building and installing, make sure to either set the COIN_INSTALL_DIR variable to point to the installation or set PKG_CONFIG_PATH to point to the directory where the .pc files are installed. You may also need to set either LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (OS X).

Installation

If you are building against the coin-or-cbc package installed by conda, be sure to conda install pkg-config, which is needed to find he Cbc libraries installed by conda. Once Numpy and Cbc are installed, simply do:

$ pip install cylp
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']

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]

Documentation

You may access CyLP's documentation:

  1. Online : Please visit http://coin-or.github.io/CyLP/
  2. Offline : To install CyLP's documentation in your repository, you need Sphinx (http://sphinx-doc.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.

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
Comments
  • Python 3 support for CyLP

    Python 3 support for CyLP

    • Changes needed for CyLP to work in Python 3.4.
    • A single code base is used which supports Python 2.7, 3.3, and 3.4.
    • Unit test pass in all of the above Python version.

    closes #15

    opened by jjhelmus 37
  • ModuleNotFoundError: No module named 'cylp.cy.CyCoinIndexedVector'

    ModuleNotFoundError: No module named 'cylp.cy.CyCoinIndexedVector'

    After cloned CyLP master branch, and locally installed to virtualenv via python setup.py install,

    When running with code: cy_solver = CyClpSimplex() cy_solver.readMps(TEST_FILE)

    The following exception is thrown: File "/Users/shuohuang/Projects/CyLP/cylp/cy/__init__.py", line 1, in <module> from .CyCoinIndexedVector import CyCoinIndexedVector ModuleNotFoundError: No module named 'cylp.cy.CyCoinIndexedVector'

    bug information 
    opened by fuxiocteract 19
  • Compile issue - 'PyThreadState'

    Compile issue - 'PyThreadState'

    Hi,

    I've compiled CyLP before without any issues but just ran into a problem with Python 3.7 I'm using coincbc-2.10.2 (conda forge), python 3.7.3, numpy 1.16.4, gcc 9.1.0 and cython 0.29.11. Also the COIN_INSTALL_DIR has been correctly set.

    I've seen similar errors from PyThreadState reported for pandas and numpy link

    Hope you can help!

    Here's the error stack.

    n0/jss548/miniconda3/envs/radar-dev/lib/python3.7/site-packages/numpy/core/include -I. -I/g/data/en0/jss548/miniconda3/envs/radar-dev/include/python3.7m -c cylp/cy/CyCbcModel.cpp -o build/temp.linux-x86_64-3.7/cylp/cy/CyCbcModel.o -w cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++ cylp/cy/CyCbcModel.cpp: In function 'void __Pyx_ExceptionSave(PyObject**, PyObject**, PyObject**)': cylp/cy/CyCbcModel.cpp:10528:21: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_type'; did you mean 'curexc_type'? 10528 | type = tstate->exc_type; | ^~~~~~~~ | curexc_type cylp/cy/CyCbcModel.cpp:10529:22: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_value'; did you mean 'curexc_value'? 10529 | value = tstate->exc_value; | ^~~~~~~~~ | curexc_value cylp/cy/CyCbcModel.cpp:10530:19: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_traceback'; did you mean 'curexc_traceback'? 10530 | tb = tstate->exc_traceback; | ^~~~~~~~~~~~~ | curexc_traceback cylp/cy/CyCbcModel.cpp: In function 'void __Pyx_ExceptionReset(PyObject, PyObject, PyObject)': cylp/cy/CyCbcModel.cpp:10542:24: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_type'; did you mean 'curexc_type'? 10542 | tmp_type = tstate->exc_type; | ^~~~~~~~ | curexc_type cylp/cy/CyCbcModel.cpp:10543:25: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_value'; did you mean 'curexc_value'? 10543 | tmp_value = tstate->exc_value; | ^~~~~~~~~ | curexc_value cylp/cy/CyCbcModel.cpp:10544:22: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_traceback'; did you mean 'curexc_traceback'? 10544 | tmp_tb = tstate->exc_traceback; | ^~~~~~~~~~~~~ | curexc_traceback cylp/cy/CyCbcModel.cpp:10545:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_type'; did you mean 'curexc_type'? 10545 | tstate->exc_type = type; | ^~~~~~~~ | curexc_type cylp/cy/CyCbcModel.cpp:10546:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_value'; did you mean 'curexc_value'? 10546 | tstate->exc_value = value; | ^~~~~~~~~ | curexc_value cylp/cy/CyCbcModel.cpp:10547:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_traceback'; did you mean 'curexc_traceback'? 10547 | tstate->exc_traceback = tb; | ^~~~~~~~~~~~~ | curexc_traceback cylp/cy/CyCbcModel.cpp: In function 'int __Pyx_GetException(PyObject**, PyObject**, PyObject**)': cylp/cy/CyCbcModel.cpp:10590:24: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_type'; did you mean 'curexc_type'? 10590 | tmp_type = tstate->exc_type; | ^~~~~~~~ | curexc_type cylp/cy/CyCbcModel.cpp:10591:25: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_value'; did you mean 'curexc_value'? 10591 | tmp_value = tstate->exc_value; | ^~~~~~~~~ | curexc_value cylp/cy/CyCbcModel.cpp:10592:22: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_traceback'; did you mean 'curexc_traceback'? 10592 | tmp_tb = tstate->exc_traceback; | ^~~~~~~~~~~~~ | curexc_traceback cylp/cy/CyCbcModel.cpp:10593:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_type'; did you mean 'curexc_type'? 10593 | tstate->exc_type = local_type; | ^~~~~~~~ | curexc_type cylp/cy/CyCbcModel.cpp:10594:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_value'; did you mean 'curexc_value'? 10594 | tstate->exc_value = local_value; | ^~~~~~~~~ | curexc_value cylp/cy/CyCbcModel.cpp:10595:13: error: 'PyThreadState' {aka 'struct _ts'} has no member named 'exc_traceback'; did you mean 'curexc_traceback'? 10595 | tstate->exc_traceback = local_tb; | ^~~~~~~~~~~~~ | curexc_traceback error: command '/apps/gcc/9.1.0/bin/gcc' failed with exit status 1 ---------------------------------------- ERROR: Command "/g/data/en0/jss548/miniconda3/envs/radar-dev/bin/python -u -c 'import setuptools, tokenize;file='"'"'/short/en0/jss548/tmp/pip-install-b93fks8q/cylp/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /short/en0/jss548/tmp/pip-record-4bnpy7e2/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /short/en0/jss548/tmp/pip-install-b93fks8q/cylp/

    bug question 
    opened by joshua-wx 18
  • error during pip install of cylp, os environ COIN_INSTALL_DIR not set with apt install of coin

    error during pip install of cylp, os environ COIN_INSTALL_DIR not set with apt install of coin

    I installed COIN using sudo apt-get install coinor-cbc on an ubuntu machine. (Which is the suggested method of installation on the official coin page).

    Now when I try to install cylp using pip, I get the following error:

    Collecting cylp
      Using cached cylp-0.2.3.6.tar.gz
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "/tmp/pip-build-setUG3/cylp/setup.py", line 44, in <module>
            'to the location of the COIN installation')
        Exception: Please set the environment variable COIN_INSTALL_DIR to the location of the COIN installation
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-setUG3/cylp/
    
    

    What should COIN_INSTALL_DIR be set to if I installed coin through apt? I have no idea where the location of my COIN installation is. How do I find out?

    Ideally this error message should say something like:

    Please set the environment variable COIN_INSTALL_DIR to the location of the COIN installation. If you installed COIN through your package manager, this is probably /whateverTheDirIs
    

    I don't know why this environment variable wasn't permanantly set upon install of COIN. I did logout and log back in to refresh the environment. That didn't fix it.

    opened by matt-telstra 18
  • pip installation fails on Windows

    pip installation fails on Windows

    According to the README, CyLP should be installable via pip install cylp, with numpy mentioned as a requirement. The README specifically says: On Windows, installing will download a binary wheel that includes Cbc (no additional steps required). However, when I do the following on my Windows 10 machine with Anaconda:

    conda create -n coin python numpy scipy
    conda activate coin
    pip install cylp
    

    I get this long error message:

        ERROR: Command errored out with exit status 1:
         command: 'C:\Users\mkaut\AppData\Local\Continuum\anaconda3\envs\coin\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\mkaut\\AppData\\Local\\Temp\\pip-install-__v7_3xr\\cylp\\setup.py'"'"'; __file__='"'"'C:\\Users\\mkaut\\AppData\\Local\\Temp\\pip-install-__v7_3xr\\cylp\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\pip-egg-info'
             cwd: C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\
        Complete output (35 lines):
        Traceback (most recent call last):
          File "C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\setup.py", line 52, in get_libs
            flags = (check_output(['pkg-config', '--libs', 'cbc'])
          File "C:\Users\mkaut\AppData\Local\Continuum\anaconda3\envs\coin\lib\subprocess.py", line 411, in check_output
            return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
          File "C:\Users\mkaut\AppData\Local\Continuum\anaconda3\envs\coin\lib\subprocess.py", line 489, in run
            with Popen(*popenargs, **kwargs) as process:
          File "C:\Users\mkaut\AppData\Local\Continuum\anaconda3\envs\coin\lib\subprocess.py", line 854, in __init__
            self._execute_child(args, executable, preexec_fn, close_fds,
          File "C:\Users\mkaut\AppData\Local\Continuum\anaconda3\envs\coin\lib\subprocess.py", line 1307, in _execute_child
            hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
        FileNotFoundError: [WinError 2] The system cannot find the file specified
    
        During handling of the above exception, another exception occurred:
    
        Traceback (most recent call last):
          File "C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\setup.py", line 61, in get_libs
            with open(join(CoinDir, 'share', 'coin',
        NameError: name 'CoinDir' is not defined
    
        During handling of the above exception, another exception occurred:
    
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\setup.py", line 100, in <module>
            libs, libDirs, incDirs = get_libs()
          File "C:\Users\mkaut\AppData\Local\Temp\pip-install-__v7_3xr\cylp\setup.py", line 75, in get_libs
            raise Exception('''
        Exception:
                    Could not automatically find location of COIN installation.
                    If an error occus, please ensure that either COIN_INSTALL_DIR
                    is set to the location of the installation or PKG_CONFIG_PATH
                    points to the location of the .pc files.
    
        Warning: Could not automatically find COIN installation
        ----------------------------------------
    ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
    

    Is this a bug, or have I missed something? I see that it is missing COIN, but the README says that this should be downloaded automatically...

    opened by mkaut 13
  • problem at getting started

    problem at getting started

    Hi, here is what get when running : >>>from cylp.cy import CyClpSimplex

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
     File "cylp/cy/__init__.py", line 1, in <module>
      from CyCoinIndexedVector import CyCoinIndexedVector
     ImportError: No module named CyCoinIndexedVector
    

    cannot figure out why getting this message!

    opened by posseidon23 12
  • Unit tests fail on OS X 10.9 (Mavericks) with CBC 2.8.8

    Unit tests fail on OS X 10.9 (Mavericks) with CBC 2.8.8

    On a machine running Mac OS X 10.9 (Mavericks), using Python 2.7.6 provided by Anaconda 1.8.0.

    CBC version 2.8.8 was built using the defaults:

    ./configure
    make
    make install
    

    CyLP builds fine but the unit tests fail as follows:

    ~/python/CyLP$ nosetests -v
    test_Obj1 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_bound1 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_bound2 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_bound3 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_bound4 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_constraint_1 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_constraint_single1 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_constraint_single2 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_constraint_single3 (cylp.py.modeling.test_modeling.TestModeling) ... ok
    test_removeConst (cylp.py.modeling.test_modeling.TestModeling) ... python(76203,0x7fff7db6d310) malloc: *** error for object 0x101deccf8: incorrect checksum for freed object - object was probably modified after being freed.
    *** set a breakpoint in malloc_error_break to debug
    

    Trying to use the CyClpSimplex object in Python code from the above build leads to either a malloc error as in above, or a segmentation fault.

    Doing some debugging it looks like the CBC libraries are linked to libc++ (The clang C++ standard library that is the default in 10.9), where as the CyLP shared libraries are linked against libstdc++ (The GCC library). Unfortunately these two libraries are not ABI compatible which is what I think is leading to the memory errors.

    ~/code/Cbc/Cbc-2.8.8$ otool -L lib/libCbc.3.dylib
    lib/libCbc.3.dylib:
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libCbc.3.dylib (compatibility version 12.0.0, current version 12.8.0)
        /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
    
    ~/python/CyLP$ otool -L cylp/cy/CyClpSimplex.so
    cylp/cy/CyClpSimplex.so:
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libCbcSolver.3.dylib (compatibility version 12.0.0, current version 12.8.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libCbc.3.dylib (compatibility version 12.0.0, current version 12.8.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libCgl.1.dylib (compatibility version 10.0.0, current version 10.5.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libOsiClp.1.dylib (compatibility version 14.0.0, current version 14.6.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libClp.1.dylib (compatibility version 14.0.0, current version 14.6.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libOsi.1.dylib (compatibility version 13.0.0, current version 13.5.0)
        /Users/jhelmus/code/Cbc/Cbc-2.8.8/lib/libCoinUtils.3.dylib (compatibility version 13.0.0, current version 13.11.0)
        /usr/lib/libbz2.1.0.dylib (compatibility version 1.0.0, current version 1.0.5)
        libz.1.dylib (compatibility version 1.0.0, current version 1.2.7)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)
        /System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 60.0.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 2577.0.0)
    

    I tried to force CyLP to link against the libc++ libraries but ran into issue

    ~/python/CyLP$ export LDFLAGS="-stdlib=libc++"
    ~/python/CyLP$ export MACOSX_DEPLOYMENT_TARGET=10.9
    ~/python/CyLP$ python setup.py build_ext -i
    running build_ext
    building 'cylp.cy.CyClpPrimalColumnPivotBase' extension
    creating build
    creating build/temp.macosx-10.5-x86_64-2.7
    creating build/temp.macosx-10.5-x86_64-2.7/cylp
    creating build/temp.macosx-10.5-x86_64-2.7/cylp/cpp
    creating build/temp.macosx-10.5-x86_64-2.7/cylp/cy
    ...
    gcc -fno-strict-aliasing -I/Users/jhelmus/anaconda/include -arch x86_64 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I./cylp/cpp -I./cylp/cy -I/Users/jhelmus/code/Cbc/Cbc-2.8.8/include/coin -I/Users/jhelmus/anaconda/lib/python2.7/site-packages/numpy/core/include -I. -I/Users/jhelmus/anaconda/include/python2.7 -c cylp/cy/CyClpDualRowPivotBase.cpp -o build/temp.macosx-10.5-x86_64-2.7/cylp/cy/CyClpDualRowPivotBase.o -w
    cylp/cy/CyClpDualRowPivotBase.cpp:5852:13: error: call to 'isspace' is ambiguous
            if (isspace(*ts))
                ^~~~~~~
    /usr/include/ctype.h:267:1: note: candidate function
    isspace(int _c)
    ^
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/cctype:124:38: note:
          candidate function
    inline _LIBCPP_INLINE_VISIBILITY int isspace(int __c) {return __libcpp_i...
                                         ^
    1 error generated.
    error: command 'gcc' failed with exit status 1
    

    This seems to be the problem that PR #8 tries to address but I never was able to get the customInstall class to run the fixes.

    The work-around I have been using for the time is add the necessary flags when building CBC so that the libraries link against libstdc++.

    ./configure 'ADD_CXXFLAGS=-stdlib=libstdc++' 'LDFLAGS=-stdlib=libstdc++'
    make
    make install
    

    When built with the above, CyLP passes all tests, but oddly the CBC libraries still are linked to libc++ when checked with otool.

    I did not run into this issue on OS X 10.8, but no longer have access to a machine running that version to test on.

    opened by jjhelmus 11
  • Error when installing CyLP: no member named 'f_tstate' in '_frame'

    Error when installing CyLP: no member named 'f_tstate' in '_frame'

    Hi,

    I've been trying to install CyLP on my mac and when I run python setup.py install I get the error pasted below. Do you know how to get around this error? I found this link: https://github.com/scikit-learn/scikit-learn/issues/3114 and ran pip install cython https://github.com/scikit-learn/scikit-learn/archive/master.zip as the suggested workaround, but that didn't seem to make any difference and I still get the same error. Is there another way I can get around this?

    Thanks!


    Last login: Sun Mar 27 16:57:54 on ttys001 Kathleen-Szabos-MacBook-Pro:~ admin$ ls Applications Movies anaconda Desktop Music eclipse Documents Pictures setuptools-20.3.1.zip Downloads Public Library Sites Kathleen-Szabos-MacBook-Pro:~ admin$ cd Downloads/ Kathleen-Szabos-MacBook-Pro:Downloads admin$ cd CyLP-master Kathleen-Szabos-MacBook-Pro:CyLP-master admin$ python setup.py install Traceback (most recent call last): File "setup.py", line 40, in CoinDir = os.environ['COIN_INSTALL_DIR'] File "/Users/admin/anaconda/lib/python3.5/os.py", line 683, in getitem raise KeyError(key) from None KeyError: 'COIN_INSTALL_DIR'

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "setup.py", line 46, in location = dirname(check_output(['which', 'clp']).strip()) File "/Users/admin/anaconda/lib/python3.5/subprocess.py", line 629, in check_output **kwargs).stdout File "/Users/admin/anaconda/lib/python3.5/subprocess.py", line 711, in run output=stdout, stderr=stderr) subprocess.CalledProcessError: Command '['which', 'clp']' returned non-zero exit status 1

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last): File "setup.py", line 49, in raise Exception('Please set the environment variable COIN_INSTALL_DIR' Exception: Please set the environment variable COIN_INSTALL_DIR to the location of the COIN installation Kathleen-Szabos-MacBook-Pro:CyLP-master admin$ export COIN_INSTALL_DIR=/Users/admin/Downloads/Cbc-2.9.8 Kathleen-Szabos-MacBook-Pro:CyLP-master admin$ python setup.py install /Users/admin/anaconda/lib/python3.5/site-packages/setuptools-20.3.1-py3.5.egg/setuptools/dist.py:285: UserWarning: Normalizing '0.7.4 ' to '0.7.4' running install cylp/cy/CyClpDualRowPivotBase.cpp: if (std::isspace(_ts)) cylp/cy/CyCoinModel.cpp: if (std::isspace(_ts)) cylp/cy/CyDualPivotPythonBase.cpp: if (std::isspace(_ts)) cylp/cy/CyOsiCuts.cpp: if (std::isspace(_ts)) cylp/cy/CyPEPivot.cpp: std::isspace(Py_CHARMASK(s[len-1])) && cylp/cy/CyTest.cpp: std::isspace(Py_CHARMASK(s[len-1])) && running build running build_py running build_ext building 'cylp.cy.CyClpPrimalColumnPivotBase' extension gcc -fno-strict-aliasing -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/admin/anaconda/include -arch x86_64 -I./cylp/cpp -I./cylp/cy -I/Users/admin/Downloads/Cbc-2.9.8/include/coin -I/Users/admin/anaconda/lib/python3.5/site-packages/numpy/core/include -I. -I/Users/admin/anaconda/include/python3.5m -c cylp/cpp/IClpPrimalColumnPivotBase.cpp -o build/temp.macosx-10.5-x86_64-3.5/cylp/cpp/IClpPrimalColumnPivotBase.o -w gcc -fno-strict-aliasing -Wsign-compare -Wunreachable-code -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/Users/admin/anaconda/include -arch x86_64 -I./cylp/cpp -I./cylp/cy -I/Users/admin/Downloads/Cbc-2.9.8/include/coin -I/Users/admin/anaconda/lib/python3.5/site-packages/numpy/core/include -I. -I/Users/admin/anaconda/include/python3.5m -c cylp/cy/CyClpPrimalColumnPivotBase.cpp -o build/temp.macosx-10.5-x86_64-3.5/cylp/cy/CyClpPrimalColumnPivotBase.o -w cylp/cy/CyClpPrimalColumnPivotBase.cpp:5019:19: error: no member named 'f_tstate' in '_frame' (*frame)->f_tstate = tstate; ~~~~~~~~ ^ 1 error generated. error: command 'gcc' failed with exit status 1

    opened by kathleenszabo 10
  • Slow adding constraints

    Slow adding constraints

    Consider the following program:

    #!/usr/bin/env python
    
    from cylp.cy import CyClpSimplex
    
    s = CyClpSimplex()
    s.optimizationDirection = 'max'
    
    for n in range(0, 20):
        print n
    
        # volume
        a = s.addVariable('a_{}'.format(n), 1, isInt=False)
        s += 0.0 <= a <= ((n+1) * 10)
    
        # onoff
        b = s.addVariable('b_{}'.format(n), 1, isInt=True)
        s += (-(n+1) * 10) * b + a <= 0
    
    s.writeLp('test.lp')
    

    This creates 40 variables: 20 real variables with an upper and lower bound, and 20 "on off" binary variables, which are constrained to be "on" if their corresponding real variable is >= 0.

    This program is exceptionally slow to build using CyLP, I think due to the way it manages the sparse matrix? My actual problem has a lot more than 20 variables to be added. Is there a more direct way to achieve this? Perhaps by tracking the row/column indices manually? The resulting matrix is particularly sparse, although the variables are interconnected (not in the example, but in my real problem).

    opened by snorfalorpagus 10
  • a.any() or a.all() truth value error

    a.any() or a.all() truth value error

    Hi

    based on the example code posted on the README.rst I get the following error. Have you seen it?

    I am running it on windows 10 64bit and in an Anaconda Python 2.7 32bit environment. I get the following error prompt.

    Cheers Andres

    Traceback (most recent call last):
      File "testCylp.py", line 21, in <module>
        s += A * x <= a
      File "CyClpSimplex.pyx", line 1206, in cylp.cy.CyClpSimplex.CyClpSimplex.__iadd__ (cylp\cy\CyClpSimplex.cpp:15746)
      File "CyClpSimplex.pyx", line 1219, in cylp.cy.CyClpSimplex.CyClpSimplex.addConstraint (cylp\cy\CyClpSimplex.cpp:15965)
      File "d:\Anaconda3\envs\py27_32\lib\site-packages\cylp-0.7.2-py2.7-win32.egg\cylp\py\modeling\CyLPModel.py", line 981, in addConstraint
        c = cons.evaluate(consName)
      File "d:\Anaconda3\envs\py27_32\lib\site-packages\cylp-0.7.2-py2.7-win32.egg\cylp\py\modeling\CyLPModel.py", line 266, in evaluate
        cons.perform(token, left, right)
      File "d:\Anaconda3\envs\py27_32\lib\site-packages\cylp-0.7.2-py2.7-win32.egg\cylp\py\modeling\CyLPModel.py", line 372, in perform
        if left == None:
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    

    The following pip packages are installed

    (py27_32) D:\>conda list
    # packages in environment at d:\Anaconda3\envs\py27_32:
    #
    certifi                   2017.7.27.1              py27_0    conda-forge
    cylp                      0.7.2                     <pip>
    mkl                       2017.0.3                      0
    numpy                     1.13.1                   py27_0
    pip                       9.0.1                    py27_0    conda-forge
    python                    2.7.13                        1    conda-forge
    scipy                     0.19.1              np113py27_0
    setuptools                36.3.0                   py27_0    conda-forge
    vs2008_runtime            9.00.30729.5054               0
    wheel                     0.29.0                   py27_0    conda-forge
    wincertstore              0.2                      py27_0    conda-forge
    
    opened by andresbh 9
  • Thoughts to have CyLP on conda-forge

    Thoughts to have CyLP on conda-forge

    Hello,

    So I was thinking, it might be a worth while endeavour to get CyLP on conda-forge https://conda-forge.org/ similar to coincbc, Py-ART, numpy etc. Probably would make the installation process much easier and managing environments better. I began testing some conda building with it, but the most recent pypi version has older cython generated files so conda-build fails. Questions I have are, is there desire to have CyLP on conda-forge? If so, would it be possible to have a pypi release that reflects the most recent github changes? I can then maybe take a whack at it and see if I can get a build going. Just some thoughts etc.

    opened by zssherman 8
  • Jupyter Kernel Dies at getCbcModel()

    Jupyter Kernel Dies at getCbcModel()

    I am using this example: http://coin-or.github.io/CyLP/modules/CyCbcModel.html On jupyter kernel dies at cbcModel = s.getCbcModel()

    Ipython displays this error /home/builder/.termux-build/coinor-clp/src/src/OsiClp/OsiClpSolverInterface.cpp:7183: virtual int OsiClpSolverInterface::dualPivotResult(int &, int &, int, int, double &, CoinPackedVector *): assertion "modelPtr_->solveType() == 2" failed Aborted

    opened by defencedog 0
  • test_MIP.py Error

    test_MIP.py Error

    New to cylp, I install cylp by pip and run the file CyLP/cylp/tests/test_MIP.py

    But python returns with error: " cbcModel.branchAndBound() AttributeError: 'cylp.cy.CyCbcModel.CyCbcModel' object has no attribute 'branchAndBound' " I hope to find a solution for this, thanks so much!

    opened by xueno6 3
  • Cbc binary version to use?

    Cbc binary version to use?

    I have a simple question: in CyLP documentation, it says: Cbc. The version should be 2.10 (recommended)

    is that still the case or we can use 2.10.8 binary to build CyLP? thank you.

    opened by HuangRicky 5
  • how to surpress printing of simplex solver

    how to surpress printing of simplex solver

    I would like to surpress all printing of the primal simplex solver for CyClpSimplex when calling primal(). I have tried to do so with python contextlib to redicrect stdout and stderr into /dev/null but it still keeps printing things like: Clp0006I 0 Obj 0 Dual inf 0.018082951 (1) w.o. free dual inf (0)

    is there a way to surpress this?

    opened by fboerman 0
  • method for setting arbitrary parameters

    method for setting arbitrary parameters

    Hello,

    I use cvxpy with cbc solver from CyLP to solve ILP problem of a big size.

    Parameters which I pass to cvxpy function solve: problem.solve(verbose=True, solver='CBC', numberThreads = 1, allowablePercentageGap = 1) are not later used in CyLP. Because the problem is big I want to use more threads for counting.

    Is it possible to add method for setting arbitrary parameters and use more threads to solve problem?

    Discussion on this topic here: https://github.com/coin-or/Cbc/issues/489

    opened by Marie73 1
  • OsiSolverInterface methods not exposed to Python

    OsiSolverInterface methods not exposed to Python

    https://github.com/coin-or/Osi/blob/master/src/Osi/OsiSolverInterface.hpp has lots of useful methods, but https://github.com/coin-or/CyLP/blob/master/cylp/cy/CyOsiSolverInterface.pxd does not expose them.

    opened by mkoeppe 0
Releases(v0.91.5)
Owner
COIN-OR Foundation
Computational Infrastructure for Operations Research.
COIN-OR Foundation
monolish: MONOlithic Liner equation Solvers for Highly-parallel architecture

monolish is a linear equation solver library that monolithically fuses variable data type, matrix structures, matrix data format, vendor specific data transfer APIs, and vendor specific numerical algebra libraries.

RICOS Co. Ltd. 179 Dec 21, 2022
High performance, easy-to-use, and scalable machine learning (ML) package, including linear model (LR), factorization machines (FM), and field-aware factorization machines (FFM) for Python and CLI interface.

What is xLearn? xLearn is a high performance, easy-to-use, and scalable machine learning package that contains linear model (LR), factorization machin

Chao Ma 3k Jan 8, 2023
Formulae is a Python library that implements Wilkinson's formulas for mixed-effects models.

formulae formulae is a Python library that implements Wilkinson's formulas for mixed-effects models. The main difference with other implementations li

null 34 Dec 21, 2022
JMP is a Mixed Precision library for JAX.

Mixed precision training [0] is a technique that mixes the use of full and half precision floating point numbers during training to reduce the memory bandwidth requirements and improve the computational efficiency of a given model.

DeepMind 108 Dec 31, 2022
Python module for performing linear regression for data with measurement errors and intrinsic scatter

Linear regression for data with measurement errors and intrinsic scatter (BCES) Python module for performing robust linear regression on (X,Y) data po

Rodrigo Nemmen 56 Sep 27, 2022
MIT-Machine Learning with Python–From Linear Models to Deep Learning

MIT-Machine Learning with Python–From Linear Models to Deep Learning | One of the 5 courses in MIT MicroMasters in Statistics & Data Science Welcome t

null 2 Aug 23, 2022
A linear equation solver using gaussian elimination. Implemented for fun and learning/teaching.

A linear equation solver using gaussian elimination. Implemented for fun and learning/teaching. The solver will solve equations of the type: A can be

Sanjeet N. Dasharath 3 Feb 15, 2022
Stats, linear algebra and einops for xarray

xarray-einstats Stats, linear algebra and einops for xarray ⚠️ Caution: This project is still in a very early development stage Installation To instal

ArviZ 30 Dec 28, 2022
icepickle is to allow a safe way to serialize and deserialize linear scikit-learn models

icepickle It's a cooler way to store simple linear models. The goal of icepickle is to allow a safe way to serialize and deserialize linear scikit-lea

vincent d warmerdam 24 Dec 9, 2022
Simple linear model implementations from scratch.

Hand Crafted Models Simple linear model implementations from scratch. Table of contents Overview Project Structure Getting started Citing this project

Jonathan Sadighian 2 Sep 13, 2021
Iterative stochastic gradient descent (SGD) linear regressor with regularization

SGD-Linear-Regressor Iterative stochastic gradient descent (SGD) linear regressor with regularization Dataset: Kaggle “Graduate Admission 2” https://w

Zechen Ma 1 Oct 29, 2021
This repository contains the code to predict house price using Linear Regression Method

House-Price-Prediction-Using-Linear-Regression The dataset I used for this personal project is from Kaggle uploaded by aariyan panchal. Link of Datase

null 0 Jan 28, 2022
A linear regression model for house price prediction

Linear_Regression_Model A linear regression model for house price prediction. This code is using these packages, so please make sure your have install

ShawnWang 1 Nov 29, 2021
Multiple Linear Regression using the LinearRegression class from sklearn.linear_model library

Multiple-Linear-Regression-master - A python program to implement Multiple Linear Regression using the LinearRegression class from sklearn.linear model library

Kushal Shingote 1 Feb 6, 2022
An implementation of Relaxed Linear Adversarial Concept Erasure (RLACE)

Background This repository contains an implementation of Relaxed Linear Adversarial Concept Erasure (RLACE). Given a dataset X of dense representation

Shauli Ravfogel 4 Apr 13, 2022
A simple python program which predicts the success of a movie based on it's type, actor, actress and director

Movie-Success-Prediction A simple python program which predicts the success of a movie based on it's type, actor, actress and director. The program us

Mahalinga Prasad R N 1 Dec 17, 2021
Applied Machine Learning for Graduate Program in Computer Science (PPGCC)

Applied Machine Learning for Graduate Program in Computer Science (PPGCC) - Federal University of Santa Catarina

Jônatas Negri Grandini 1 Dec 22, 2021
learn python in 100 days, a simple step could be follow from beginner to master of every aspect of python programming and project also include side project which you can use as demo project for your personal portfolio

learn python in 100 days, a simple step could be follow from beginner to master of every aspect of python programming and project also include side project which you can use as demo project for your personal portfolio

BDFD 6 Nov 5, 2022
Python library which makes it possible to dynamically mask/anonymize data using JSON string or python dict rules in a PySpark environment.

pyspark-anonymizer Python library which makes it possible to dynamically mask/anonymize data using JSON string or python dict rules in a PySpark envir

null 6 Jun 30, 2022