Skip to main content

Formulate optimization problems using sympy expressions and solve them using interfaces to third-party optimization software (e.g. GLPK).

Project description

Sympy based mathematical programming language

Current PyPI Version Supported Python Versions Apache Software License Version 2.0 Code of Conduct GitHub Actions Codecov Documentation Status Join the chat at https://gitter.im/biosustain/optlang Publication Zenodo Source Code

Optlang is a Python package for solving mathematical optimization problems, i.e. maximizing or minimizing an objective function over a set of variables subject to a number of constraints. Optlang provides a common interface to a series of optimization tools, so different solver backends can be changed in a transparent way. Optlang’s object-oriented API takes advantage of the symbolic math library sympy to allow objective functions and constraints to be easily formulated from symbolic expressions of variables (see examples).

Show us some love by staring this repo if you find optlang useful!

Also, please use the GitHub issue tracker to let us know about bugs or feature requests, or our gitter channel if you have problems or questions regarding optlang.

Installation

Install using pip

pip install optlang

This will also install swiglpk, an interface to the open source (mixed integer) LP solver GLPK. Quadratic programming (and MIQP) is supported through additional optional solvers (see below).

Dependencies

The following dependencies are needed.

The following are optional dependencies that allow other solvers to be used.

Example

Formulating and solving the problem is straightforward (example taken from GLPK documentation):

from optlang import Model, Variable, Constraint, Objective

# All the (symbolic) variables are declared, with a name and optionally a lower and/or upper bound.
x1 = Variable('x1', lb=0)
x2 = Variable('x2', lb=0)
x3 = Variable('x3', lb=0)

# A constraint is constructed from an expression of variables and a lower and/or upper bound (lb and ub).
c1 = Constraint(x1 + x2 + x3, ub=100)
c2 = Constraint(10 * x1 + 4 * x2 + 5 * x3, ub=600)
c3 = Constraint(2 * x1 + 2 * x2 + 6 * x3, ub=300)

# An objective can be formulated
obj = Objective(10 * x1 + 6 * x2 + 4 * x3, direction='max')

# Variables, constraints and objective are combined in a Model object, which can subsequently be optimized.
model = Model(name='Simple model')
model.objective = obj
model.add([c1, c2, c3])

status = model.optimize()

print("status:", model.status)
print("objective value:", model.objective.value)
print("----------")
for var_name, var in model.variables.iteritems():
    print(var_name, "=", var.primal)

The example will produce the following output:

status: optimal
objective value: 733.333333333
----------
x2 = 66.6666666667
x3 = 0.0
x1 = 33.3333333333

Using a particular solver

If you have more than one solver installed, it’s also possible to specify which one to use, by importing directly from the respective solver interface, e.g. from optlang.glpk_interface import Model, Variable, Constraint, Objective

Documentation

Documentation for optlang is provided at readthedocs.org.

Citation

Please cite Publication if you use optlang in a scientific publication. In case you would like to reference a specific version of of optlang you can also include the respective Zenodo DOI (Zenodo Source Code points to the latest version).

Contributing

Please read CONTRIBUTING.md.

Funding

The development of optlang was partly support by the Novo Nordisk Foundation.

Future outlook

  • Mosek interface (provides academic licenses)

  • GAMS output (support non-linear problem formulation)

  • DEAP (support for heuristic optimization)

  • Interface to NEOS optimization server (for testing purposes and solver evaluation)

  • Automatically handle fractional and absolute value problems when dealing with LP/MILP/QP solvers (like GLPK, CPLEX etc.)

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

optlang-1.8.2.tar.gz (137.4 kB view details)

Uploaded Source

Built Distribution

optlang-1.8.2-py2.py3-none-any.whl (141.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file optlang-1.8.2.tar.gz.

File metadata

  • Download URL: optlang-1.8.2.tar.gz
  • Upload date:
  • Size: 137.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for optlang-1.8.2.tar.gz
Algorithm Hash digest
SHA256 52215bd75c265299f450bb904a890a91992446fff668d8f8e98968afbcb591c9
MD5 2207a1d855434659ccfb9d3a9ff43d8f
BLAKE2b-256 a3f754e7cf53f7577a11de903cf175d6b241656d60912dcd5e91cb54f95d3ecc

See more details on using hashes here.

File details

Details for the file optlang-1.8.2-py2.py3-none-any.whl.

File metadata

  • Download URL: optlang-1.8.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 141.8 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for optlang-1.8.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e990ab097564919c815e11fa9b6301a0af052a73f53c8fb994ad404f38150515
MD5 58edbc26b14fae73196e4baa51f59da1
BLAKE2b-256 af2b90852d48e0b462b03e5af5d11161e3aa8987c1016af6b1348bf365b90a8c

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