Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

swiglpk - Simple swig bindings for the GNU Linear Programming Kit

Project Description

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

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.

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
Release History

Release History

This version
History Node

1.4.4

History Node

1.4.3

History Node

1.4.1

History Node

1.4.1b2

History Node

1.4.0

History Node

1.4.0b

History Node

1.3.3

History Node

1.3.3rc2

History Node

1.3.3rc1

History Node

1.3.2rc1

History Node

1.2.22

History Node

1.2.21

History Node

1.2.20

History Node

1.2.19

History Node

1.2.18

History Node

1.2.17

History Node

1.2.16

History Node

1.2.15

History Node

1.2.14

History Node

1.2.13

History Node

1.2.12

History Node

1.0.0

History Node

0.1.0

Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
swiglpk-1.4.4-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2 MB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27m-manylinux1_i686.whl (1.7 MB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27m-manylinux1_x86_64.whl (1.8 MB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27mu-manylinux1_i686.whl (1.7 MB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27mu-manylinux1_x86_64.whl (1.8 MB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27m-win32.whl (431.7 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp27-cp27m-win_amd64.whl (505.2 kB) Copy SHA256 Checksum SHA256 cp27 Wheel Aug 8, 2017
swiglpk-1.4.4-cp33-cp33m-win32.whl (436.9 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Aug 8, 2017
swiglpk-1.4.4-cp33-cp33m-win_amd64.whl (509.0 kB) Copy SHA256 Checksum SHA256 cp33 Wheel Aug 8, 2017
swiglpk-1.4.4-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2 MB) Copy SHA256 Checksum SHA256 cp34 Wheel Aug 8, 2017
swiglpk-1.4.4-cp34-cp34m-manylinux1_i686.whl (1.7 MB) Copy SHA256 Checksum SHA256 cp34 Wheel Aug 8, 2017
swiglpk-1.4.4-cp34-cp34m-manylinux1_x86_64.whl (1.8 MB) Copy SHA256 Checksum SHA256 cp34 Wheel Aug 8, 2017
swiglpk-1.4.4-cp34-cp34m-win32.whl (436.9 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Aug 8, 2017
swiglpk-1.4.4-cp34-cp34m-win_amd64.whl (509.0 kB) Copy SHA256 Checksum SHA256 cp34 Wheel Aug 8, 2017
swiglpk-1.4.4-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2 MB) Copy SHA256 Checksum SHA256 cp35 Wheel Aug 8, 2017
swiglpk-1.4.4-cp35-cp35m-manylinux1_i686.whl (1.7 MB) Copy SHA256 Checksum SHA256 cp35 Wheel Aug 8, 2017
swiglpk-1.4.4-cp35-cp35m-manylinux1_x86_64.whl (1.8 MB) Copy SHA256 Checksum SHA256 cp35 Wheel Aug 8, 2017
swiglpk-1.4.4-cp35-cp35m-win32.whl (444.4 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Aug 8, 2017
swiglpk-1.4.4-cp35-cp35m-win_amd64.whl (525.2 kB) Copy SHA256 Checksum SHA256 cp35 Wheel Aug 8, 2017
swiglpk-1.4.4-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2 MB) Copy SHA256 Checksum SHA256 cp36 Wheel Aug 8, 2017
swiglpk-1.4.4-cp36-cp36m-manylinux1_i686.whl (1.7 MB) Copy SHA256 Checksum SHA256 cp36 Wheel Aug 8, 2017
swiglpk-1.4.4-cp36-cp36m-manylinux1_x86_64.whl (1.8 MB) Copy SHA256 Checksum SHA256 cp36 Wheel Aug 8, 2017
swiglpk-1.4.4-cp36-cp36m-win32.whl (444.4 kB) Copy SHA256 Checksum SHA256 cp36 Wheel Aug 8, 2017
swiglpk-1.4.4-cp36-cp36m-win_amd64.whl (525.2 kB) Copy SHA256 Checksum SHA256 cp36 Wheel Aug 8, 2017
swiglpk-1.4.4.tar.gz (31.9 kB) Copy SHA256 Checksum SHA256 Source Aug 8, 2017
swiglpk-1.4.4.win32-py2.7.exe (630.0 kB) Copy SHA256 Checksum SHA256 2.7 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win32-py3.3.exe (630.0 kB) Copy SHA256 Checksum SHA256 3.3 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win32-py3.4.exe (630.0 kB) Copy SHA256 Checksum SHA256 3.4 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win32-py3.5.exe (904.8 kB) Copy SHA256 Checksum SHA256 3.5 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win32-py3.6.exe (904.8 kB) Copy SHA256 Checksum SHA256 3.6 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win-amd64-py2.7.exe (731.1 kB) Copy SHA256 Checksum SHA256 2.7 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win-amd64-py3.3.exe (733.4 kB) Copy SHA256 Checksum SHA256 3.3 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win-amd64-py3.4.exe (733.4 kB) Copy SHA256 Checksum SHA256 3.4 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win-amd64-py3.5.exe (1.1 MB) Copy SHA256 Checksum SHA256 3.5 Windows Installer Aug 8, 2017
swiglpk-1.4.4.win-amd64-py3.6.exe (1.1 MB) Copy SHA256 Checksum SHA256 3.6 Windows Installer Aug 8, 2017

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting