Skip to main content

GILP

PyPI pyversions CircleCI Documentation Status codecov

GILP (Geometric Interpretation of Linear Programs) is a Python package for visualizing the geometry of:

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 phase I for finding an initial feasible solution. The package relies on Plotly to generate standalone HTML files which can be viewed in a Jupyter Notebook inline or in a web browser.

Examples

2d simplex example 3d simplex example 2d branch and bound example 3d branch and bound example

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/engri-1101/gilp.git

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.

import gilp
import numpy as np
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.

2d simplex example

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Release files for gilp 2.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gilp 2.1.0
File Size Uploaded
gilp-2.1.0.tar.gz 46.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gilp 2.1.0
File Interpreter ABI Platform
gilp-2.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 94.3 kB

Release files / gilp-2.1.0.tar.gz

Download URL gilp-2.1.0.tar.gz
Size 46.3 kB
Tags Source
SHA-256 checksum
How to use checksums
4ab540b0ff09b7003c2b93d34110c45d48e0799173ae42940779d979f7db430a
BLAKE2b-256 checksum
How to use checksums
ecc1ea97e3effb2a662b398e2abc2e0f9c7f50edc668f17c19920b3d6da2c293
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.12

Release files / gilp-2.1.0-py3-none-any.whl

Download URL gilp-2.1.0-py3-none-any.whl
Size 48.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3900693fdfcec39350746b91a7000c7b55cb1877c267de7e9c17b17782d915a7
BLAKE2b-256 checksum
How to use checksums
5f756608b6dec41d681f26987c3cfdea4bde25c4c186cf9ead0c20a8e7f3743b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.9.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page