Skip to main content

swiglpk - Simple swig bindings for the GNU Linear Programming Kit

Project description

Plain python bindings for the GNU Linear Programming Kit (GLPK)

PyPI License Build Status

Why?

swiglpk is not a high-level wrapper for GLPK (take a look at optlang if you are interested in a python-based mathematical programming language). It just provides plain vanilla swig bindings to the underlying C library. In constrast to other GLPK wrappers for python (e.g. PyGLPK, Python-GLPK, ctypes-glpk, ecyglpki etc.) it is fairly version agnostic: it will try to guess the location of the glpk.h header file (using which glpsol) and then compile the extension for your particular GLPK installation. Furthermore, swiglpk provides binary wheels for all major platforms, which are always up-to-date with the most recent GLPK version (swiglpk versions follow GLPK versioning in the major and minor version digits to emphasize that).

Please show us some love by staring this repo if you find swiglpk useful!

Installation

pip install swiglpk

That’s it. swiglpk comes with binary wheels for Windows, Mac, and Linux. No installation of third-party dependencies necessary.

Example

Running the following (slightly adapted) example from the GLPK manual

from swiglpk import *

ia = intArray(1+1000); ja = intArray(1+1000);
ar = doubleArray(1+1000);
lp = glp_create_prob();
glp_set_prob_name(lp, "sample");
glp_set_obj_dir(lp, GLP_MAX);
glp_add_rows(lp, 3);
glp_set_row_name(lp, 1, "p");
glp_set_row_bnds(lp, 1, GLP_UP, 0.0, 100.0);
glp_set_row_name(lp, 2, "q");
glp_set_row_bnds(lp, 2, GLP_UP, 0.0, 600.0);
glp_set_row_name(lp, 3, "r");
glp_set_row_bnds(lp, 3, GLP_UP, 0.0, 300.0);
glp_add_cols(lp, 3);
glp_set_col_name(lp, 1, "x1");
glp_set_col_bnds(lp, 1, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 1, 10.0);
glp_set_col_name(lp, 2, "x2");
glp_set_col_bnds(lp, 2, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 2, 6.0);
glp_set_col_name(lp, 3, "x3");
glp_set_col_bnds(lp, 3, GLP_LO, 0.0, 0.0);
glp_set_obj_coef(lp, 3, 4.0);
ia[1] = 1; ja[1] = 1; ar[1] = 1.0; # a[1,1] = 1
ia[2] = 1; ja[2] = 2; ar[2] = 1.0; # a[1,2] = 1
ia[3] = 1; ja[3] = 3; ar[3] = 1.0; # a[1,3] = 1
ia[4] = 2; ja[4] = 1; ar[4] = 10.0; # a[2,1] = 10
ia[5] = 3; ja[5] = 1; ar[5] = 2.0; # a[3,1] = 2
ia[6] = 2; ja[6] = 2; ar[6] = 4.0; # a[2,2] = 4
ia[7] = 3; ja[7] = 2; ar[7] = 2.0; # a[3,2] = 2
ia[8] = 2; ja[8] = 3; ar[8] = 5.0; # a[2,3] = 5
ia[9] = 3; ja[9] = 3; ar[9] = 6.0; # a[3,3] = 6
glp_load_matrix(lp, 9, ia, ja, ar);
glp_simplex(lp, None);
Z = glp_get_obj_val(lp);
x1 = glp_get_col_prim(lp, 1);
x2 = glp_get_col_prim(lp, 2);
x3 = glp_get_col_prim(lp, 3);
print("\nZ = %g; x1 = %g; x2 = %g; x3 = %g\n" % (Z, x1, x2, x3))
glp_delete_prob(lp);

… will produce the following output (the example can also be found at examples/example.py):

GLPK Simplex Optimizer, v4.52
3 rows, 3 columns, 9 non-zeros
*     0: obj =   0.000000000e+00  infeas =  0.000e+00 (0)
*     2: obj =   7.333333333e+02  infeas =  0.000e+00 (0)
OPTIMAL LP SOLUTION FOUND

Z = 733.333; x1 = 33.3333; x2 = 66.6667; x3 = 0

Pretty ugly right? Consider using optlang for formulating and solving your optimization problems.

Documentation

You can find documentation on GLPK’s C API here

Development

You still want to install it from source? Then you’ll need to install the following dependencies first.

  • GLPK

  • swig

If you’re on OS X, swig and GLPK can easily be installed with homebrew.

brew install swig glpk

If you’re using ubuntu linux, you can install swig and GLPK using apt-get.

apt-get install glpk-utils libglpk-dev swig

If you’re on Windows, you are on your own (checkout the appveyor.yml config file for directions).

Then clone the repo and run the following.

python setup.py install

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

swiglpk-5.0.10.tar.gz (37.6 kB view hashes)

Uploaded Source

Built Distributions

swiglpk-5.0.10-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

swiglpk-5.0.10-pp310-pypy310_pp73-macosx_10_9_x86_64.whl (776.9 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

swiglpk-5.0.10-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

swiglpk-5.0.10-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (776.7 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

swiglpk-5.0.10-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

swiglpk-5.0.10-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (777.2 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

swiglpk-5.0.10-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (1.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

swiglpk-5.0.10-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (776.7 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

swiglpk-5.0.10-cp312-cp312-win_amd64.whl (574.5 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

swiglpk-5.0.10-cp312-cp312-win32.whl (464.9 kB view hashes)

Uploaded CPython 3.12 Windows x86

swiglpk-5.0.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

swiglpk-5.0.10-cp312-cp312-macosx_11_0_arm64.whl (743.8 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

swiglpk-5.0.10-cp312-cp312-macosx_10_9_x86_64.whl (788.3 kB view hashes)

Uploaded CPython 3.12 macOS 10.9+ x86-64

swiglpk-5.0.10-cp311-cp311-win_amd64.whl (573.1 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

swiglpk-5.0.10-cp311-cp311-win32.whl (463.7 kB view hashes)

Uploaded CPython 3.11 Windows x86

swiglpk-5.0.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

swiglpk-5.0.10-cp311-cp311-macosx_11_0_arm64.whl (743.2 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

swiglpk-5.0.10-cp311-cp311-macosx_10_9_x86_64.whl (786.7 kB view hashes)

Uploaded CPython 3.11 macOS 10.9+ x86-64

swiglpk-5.0.10-cp310-cp310-win_amd64.whl (573.1 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

swiglpk-5.0.10-cp310-cp310-win32.whl (463.7 kB view hashes)

Uploaded CPython 3.10 Windows x86

swiglpk-5.0.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

swiglpk-5.0.10-cp310-cp310-macosx_11_0_arm64.whl (743.2 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

swiglpk-5.0.10-cp310-cp310-macosx_10_9_x86_64.whl (786.7 kB view hashes)

Uploaded CPython 3.10 macOS 10.9+ x86-64

swiglpk-5.0.10-cp39-cp39-win_amd64.whl (573.1 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

swiglpk-5.0.10-cp39-cp39-win32.whl (463.8 kB view hashes)

Uploaded CPython 3.9 Windows x86

swiglpk-5.0.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

swiglpk-5.0.10-cp39-cp39-macosx_11_0_arm64.whl (743.2 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

swiglpk-5.0.10-cp39-cp39-macosx_10_9_x86_64.whl (786.7 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

swiglpk-5.0.10-cp38-cp38-win_amd64.whl (573.0 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

swiglpk-5.0.10-cp38-cp38-win32.whl (463.7 kB view hashes)

Uploaded CPython 3.8 Windows x86

swiglpk-5.0.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.2 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

swiglpk-5.0.10-cp38-cp38-macosx_11_0_arm64.whl (743.4 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

swiglpk-5.0.10-cp38-cp38-macosx_10_9_x86_64.whl (786.9 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

swiglpk-5.0.10-cp37-cp37m-win_amd64.whl (572.3 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

swiglpk-5.0.10-cp37-cp37m-win32.whl (463.6 kB view hashes)

Uploaded CPython 3.7m Windows x86

swiglpk-5.0.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp37-cp37m-macosx_10_9_x86_64.whl (786.5 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

swiglpk-5.0.10-cp36-cp36m-win_amd64.whl (582.3 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

swiglpk-5.0.10-cp36-cp36m-win32.whl (470.4 kB view hashes)

Uploaded CPython 3.6m Windows x86

swiglpk-5.0.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ x86-64

swiglpk-5.0.10-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (2.1 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ i686

swiglpk-5.0.10-cp36-cp36m-macosx_10_9_x86_64.whl (786.5 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

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