Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

swiglpk

Package Overview
Dependencies
Maintainers
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

swiglpk

swiglpk - Simple swig bindings for the GNU Linear Programming Kit

  • 5.0.12
  • PyPI
  • Socket score

Maintainers
4

swiglpk

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 <https://github.com/biosustain/optlang>`__ if you are
interested in a python-based mathematical programming language). It just
provides plain vanilla `swig <http://www.swig.org/>`__ bindings to the
underlying C library. In constrast to other GLPK wrappers for python
(e.g. `PyGLPK <http://tfinley.net/software/pyglpk/>`__,
`Python-GLPK <http://www.dcc.fc.up.pt/~jpp/code/python-glpk/>`__,
`ctypes-glpk <https://code.google.com/p/ctypes-glpk/>`__,
`ecyglpki <https://github.com/equaeghe/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 <http://kam.mff.cuni.cz/~elias/glpk.pdf>`__ ...

::

    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 <https://github.com/biosustain/optlang>`__ for formulating and solving your optimization problems.

Documentation

You can find documentation on GLPK's C API here <http://kam.mff.cuni.cz/~elias/glpk.pdf>__

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 <http://brew.sh/>`__.

::

    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 <https://github.com/biosustain/swiglpk/blob/master/appveyor.yml>`_ config file for directions).

Then clone the repo and run the following.
::

    python setup.py install


.. |PyPI| image:: https://img.shields.io/pypi/v/swiglpk.svg
   :target: https://pypi.python.org/pypi/swiglpk
.. |License| image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg
   :target: http://www.gnu.org/licenses/gpl-3.0
.. |Build Status| image:: https://github.com/biosustain/swiglpk/actions/workflows/main.yml/badge.svg
   :target: https://github.com/biosustain/swiglpk/actions/workflows/main.yml

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc