Skip to main content

A simplex implementation in python

Project description

Codacy Badge Total alerts

Simplex

A python package that solve linear programming problems using the simplex method.
Features:

  • The Problem is input into the program by a file containing python expression.
  • Solves both min and max problems(duh!).
  • Uses the big M method to find a basic feasible solution when there are none available in the original program.
  • Handles adding slack variables to convert the problem into standard form.
  • Uses the lexicographic rule to prevent ending up in a loop due to degenerate extreme points.
  • outputs in html.

Run Help to get a list of available commandline options.

./test.py --help                                                                                                                                                                             [INSERT] 32mS 0 L3
usage: test.py [-h] [--equs EQUS] [--csv CSV] [--delim DELIM] [--slack SLACK] [--aux AUX] [--iter ITER] [--min] [--verbose] [--debug] [--out] [--numba]

options:
  -h, --help            show this help message and exit
  --equs EQUS, -e EQUS  the path to the file containing the equations
  --csv CSV, -c CSV     the path to the CSV file containing the problem
  --delim DELIM, -l DELIM
                        the separator for the csv file
  --slack SLACK, -s SLACK
                        slack variable base name, names are cretedby adding a number to the string
  --aux AUX, -a AUX     aux variable base name, names are cretedby adding a number to the string
  --iter ITER, -i ITER  maximum number of iterations
  --min, -m             determines whether its a minimization problem.if not, its a maximization problem
  --verbose, -v         whether to print output verbosely
  --debug, -d           whether to print debug info
  --out, -o             path to the output file
  --numba, -n           whether to print debug info]q

Example usage:

dsimplex -e ./tests/equ6.py -a xa -v -s z -m

The Equation File

dsimplex currently accepts two input formats:

Python Expressions

Each equation in the equations file should a valid python expression. There are a couple notes though:

  • For conditions that end in equality you must use == instead of = to make it a legal python expression.
  • Nothing will be evaluated so writing something like 4/5*x1 is illegal. Use .8*x1 instead.
  • You can use comments inside the equations file. They are the same format as the python comments.
  • The cost equation is one without a binary comparison operator, e.g. <=,<,>=,>.
  • The order of the equations in the equations file is not important. You can put them in in any order you want. As an example:
# cyclic test
-0.75 * x4 + 20 * x5 - 0.5 * x6 + 6 * x7
x1 + 0.25 * x4 - 8 * x5 - x6 + 9 * x7 == 0
x2 + 0.5 * x4 - 12 * x5 - 0.5 * x6 + 3 * x7 == 0
x3 + x6 == 1
x1 >= 0
x2 >= 0
x3 >= 0
x4 >= 0
x5 >= 0
x6 >= 0
x7 >= 0

CSV

  • The order of the equations is not important. It is also not important where the cost function is in the csv file as long as it is there.
  • The variables with zero coefficients should be left empty.
x1,x2,x3,x4,x5,x6,x7,cond,rhs
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0
x1,x2,x3,x4,x5,x6,x7,cond,rhs
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0
null,,,,,,,,
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0
null,,,,,,,,
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0
null,,,,,,,,
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0
x1,x2,x3,condition,rhs
1,1,-4,,
1,1,2,<=,9
1,1,-1,<=,2
-1,1,1,<=,4
1,,,>=,0
,1,,>=,0
,,1,>=,0
x1,x2,cond,rhs
1,-2,,
1,1,>=,2
-1,1,>=,1
,1,<=,3
1,,>=,0
,1,>=,0
x1,x2,x3,x4,x5,x6,x7,cond,rhs
,,,-0.75,20,-0.5,6,,
1,,,0.25,-8,-1,9,=,0
,1,,0.5,-12,-0.5,3,=,0
,,1,,,1,,=,1
1,,,,,,,>=,0
,1,,,,,,>=,0
,,1,,,,,>=,0
,,,1,,,,>=,0
,,,,1,,,>=,0
,,,,,1,,>=,0
,,,,,,1,>=,0

How to Get

You can get it from pypi:

pip3 install dsimplex

Or you can clone this repo and run it like that:

git clone https://github.com/terminaldweller/simplex && cd simplex && poetry install

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

dsimplex-0.2.0.tar.gz (28.0 kB view details)

Uploaded Source

Built Distribution

dsimplex-0.2.0-py3-none-any.whl (39.6 kB view details)

Uploaded Python 3

File details

Details for the file dsimplex-0.2.0.tar.gz.

File metadata

  • Download URL: dsimplex-0.2.0.tar.gz
  • Upload date:
  • Size: 28.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.10.6 Linux/5.18.17_1

File hashes

Hashes for dsimplex-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6a91442dd22b9cadf1ad55f2dfd312bc37000f4b5abf9e0301174ac9b11fbce1
MD5 cd31382e9f850ab97aa75ba03f3ff6b5
BLAKE2b-256 29364232a06b0cf28fc6a68e5fcf5e6ec0f54c1ce2960cff4c035214f91c9cee

See more details on using hashes here.

File details

Details for the file dsimplex-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: dsimplex-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 39.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.10.6 Linux/5.18.17_1

File hashes

Hashes for dsimplex-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 de009f964aaa86c80ac98ddc1160533ccf23baec3d2080d428b164dc44ee5b87
MD5 fcc3dc0269c1da561f34192547e63d7a
BLAKE2b-256 14bc0e5e5a4313df122416e5c281c86433cfb2405e4448bbd17f9526fb32803c

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