skip to navigation
skip to content

Not Logged In

optlang 0.2.3

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

`|Build Status| <https:"" biosustain="" optlang="">`_ `|Coverage
Status| <https:"" r="" biosustain="" optlang?branch="master">`_
`|PyPI version| <http:"" py="" optlang="">`_ `|Documentation
Status| <https:"" projects="" optlang="" ?badge="latest">`_



**optlang** provides a common interface to a series of optimization
solvers (linear & non-linear) and relies on
`sympy <http:"" en="" index.html="">`_ for problem formulation
(constraints, objectives, variables, etc.). Adding new solvers is easy:
just sub-class the high-level interface and implement the necessary
solver specific routines.


Install using pip


pip install optlang



pip install -e git+

if you want to work with the latest stable version.

Local installations like


python install

might fail installing the dependencies (unresolved issue with
``easy_install``). Running


pip install -r requirements.txt

beforehand should fix this issue.


The documentation for **optlang** is provided at
` <http:"" en="" latest=""/>`_.


- `sympy >= 0.7.5 <http:"" en="" index.html="">`_
- `swiglpk >= 0.1.0 <https:"" pypi="" swiglpk="">`_
- `glpk >= 4.45 <https:"" software="" glpk=""/>`_


Formulating and solving the problem is straightforward (example taken
from `GLPK documentation <http:"" software="" glpk="">`_):


from optlang import Model, Variable, Constraint, Objective

x1 = Variable('x1', lb=0)
x2 = Variable('x2', lb=0)
x3 = Variable('x3', lb=0)

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)

obj = Objective(10 * x1 + 6 * x2 + 4 * x3, direction='max')

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
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

Future outlook

- `Gurobi <http:""/>`_ interface (very efficient MILP
- `CPLEX <http:"" software="" commerce="" optimization="" cplex-optimizer=""/>`_
interface (very efficient MILP solver)
- `Mosek <http:""/>`_ interface (provides academic
- `GAMS <http:""/>`_ output (support non-linear problem
- `DEAP <https:"" p="" deap=""/>`_ (support for heuristic
- Interface to `NEOS <http:"" 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 <http:"" software="" commerce="" optimization="" cplex-optimizer=""/>`_


- Models should always be serializable to common problem formulation
(`CPLEX <http:"" software="" commerce="" optimization="" cplex-optimizer=""/>`_,
`GAMS <http:""/>`_, etc.)
- Models should be pickable
- Common solver configuration interface (presolver, MILP gap, etc.)

.. |Build
Status| image::
.. |Coverage
Status| image::
.. |PyPI version| image::
.. |Documentation
Status| image::  
File Type Py Version Uploaded on Size
optlang-0.2.3.tar.gz (md5) Source 2015-04-16 40KB
  • Downloads (All Versions):
  • 62 downloads in the last day
  • 433 downloads in the last week
  • 1224 downloads in the last month