Metadata-Version: 1.1
Name: swiglpk
Version: 1.4.4
Summary: swiglpk - Simple swig bindings for the GNU Linear Programming Kit
Home-page: https://github.com/biosustain/swiglpk
Author: Nikolaus Sonnenschein
Author-email: niko.sonnenschein@gmail.com
License: GPL v3
Description: swiglpk
        =======
        
        *Plain python bindings for the GNU Linear Programming Kit (GLPK)*
        
        |PyPI| |License| |Build Status| |AppVeyor 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.
        
        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://travis-ci.org/biosustain/swiglpk.svg?branch=master
           :target: https://travis-ci.org/biosustain/swiglpk
        .. |AppVeyor Status| image:: https://ci.appveyor.com/api/projects/status/mhj0r133kx7wy908/branch/master?svg=true
           :target: https://ci.appveyor.com/project/phantomas1234/swiglpk/branch/master
        
Keywords: optimization swig glpk
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Software Development
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.4
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
