Skip to main content

A Python package for visualizing the geometry of linear programs.

Project description

GILP

MIT license PyPI pyversions Documentation Status codecov Maintenance PyPI download month

GILP (Geometric Interpretation of Linear Programs) is a Python package for visualizing the geometry of linear programs (LPs) and the simplex algorithm. LPs can be constructed from NumPy arrays and many examples (such as the Klee-Minty cube) are included. The revised simplex method is implemented along with various pivot rules (such as Bland's and Dantzig's). Additionally, an initial feasible solution and iteration limit may be set. The package relies on Plotly to generate standalone HTML files which can be viewed in a Jupyter Notebook inline or in a web browser.

Output

Installation

The quickest way to get started is with a pip install.

pip install gilp

Development

To develop and run tests on gilp, first download the source code in the desired directory.

git clone https://github.com/henryrobbins/gilp

Next, cd into the gilp directory and create a Python virtual enviroment.

cd gilp
python -m venv env_name

Activate the virtual enviroment.

source env_name/bin/activate

Run the following in the virtual enviroment. The -e flag lets you make adjustments to the source code and see changes without re-installing. The [dev] installs necessary dependencies for developing and testing.

pip install -e .[dev]

To run tests and see coverage, run the following in the virtual enviroment.

coverage run -m pytest
coverage report --include=gilp/*

Usage

The LP class creates linear programs from (3) NumPy arrays: A, b, and c which define the LP in standard inequality form.

For example, consider the following LP:

The LP instance is created as follows.

from gilp.simplex import LP

A = np.array([[2, 1],
              [1, 1],
              [1, 0]])
b = np.array([[20],
              [16],
              [7]])
c = np.array([[5],
              [3]])
lp = LP(A,b,c)

After creating an LP, one can run simplex and generate a visualization with

from gilp.visualize import simplex_visual
simplex_visual(lp)

where simplex_visual() returns a plotly figure. The figure can then be viewed on a Jupyter Notebook inline using

simplex_visual(lp).show()

If .show() is run outside a Jupyter Notebook enviroment, the visualization will open up in the browser. Alternatively, the HTML file can be written and then opened.

simplex_visual(lp).write_html('name.html')

Below is the visualization for the example LP. The plot on the left shows the feasible region and constraints of the LP. Hovering over an extreme point shows the basic feasible solution, basis, and objective value. The iteration slider allows one to toggle through the iterations of simplex and see the updating tableaus. The objective slider lets one see the objective line or plane for some range of objective values.

Output

License

Licensed under the MIT License

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

gilp-0.1.0.tar.gz (22.6 kB view details)

Uploaded Source

Built Distribution

gilp-0.1.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file gilp-0.1.0.tar.gz.

File metadata

  • Download URL: gilp-0.1.0.tar.gz
  • Upload date:
  • Size: 22.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.10

File hashes

Hashes for gilp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ff846539b8b6997ae30148b5dd609605ee96cdb4c22b1d10d71340252c84c9f2
MD5 4ca0f4a49e610d88b0ceffce9dd22b96
BLAKE2b-256 22161bee91f1d20e1c9269f29ad4caff0089cfa31fcfd9c50260b3d2ec38bd85

See more details on using hashes here.

File details

Details for the file gilp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: gilp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.23.0 setuptools/49.1.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.6.10

File hashes

Hashes for gilp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4e591f151366f3c4d5fdaa19bb3054877512dfe3fc5b16d4a7529b22be910d1
MD5 02d60e6b91b161316a4bc0d53f0c6811
BLAKE2b-256 964912f4adf7b988975fe2ed55e845b84f5173089e2943bc239e4520527bfe84

See more details on using hashes here.

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