Skip to content
{{ message }}

# fdabrandao / pympl

Mathematical Programming Toolbox for AMPL/GMPL

Switch branches/tags
Could not load branches
Nothing to show

## Files

Failed to load latest commit information.
Type
Name
Commit time

## PyMPL: A Mathematical Programming Toolbox

Copyright (C) 2015-2016, Filipe Brandão
Faculdade de Ciências, Universidade do Porto
Porto, Portugal. All rights reserved. E-mail: fdabrandao@dcc.fc.up.pt.

PyMPL is a python extension to the AMPL modeling language that adds new statements for evaluating python code within AMPL/GMPL models. PyMPL also includes, among others, procedures for modeling piecewise linear functions, compressed arc-flow graphs for vector packing, sub-tour elimination constraints for TSP, and lot-sizing reformulations (LS-LIB). PyMPL is fully compatible with both python 2 and 3.

### Setup

Install from the repository:

`\$ pip install pympl`

Or build and install locally:

``````\$ pip install -r requirements.txt
\$ pip install . --upgrade
\$ cd examples; py.test -v --cov pympl
``````

PyMPL can also be used inside a Docker container that includes a simple web app for an easy usage.

### Examples

`piecewise_linear.mod`

```# Evaluate python code:
\$EXEC{
xvalues = [0, 10, 15, 25, 30, 35, 40, 45, 50, 55, 60, 70]
yvalues = [0, 20, 15, 10, 0, 50, 18, 0, 15, 24, 10, 15]
};

var u >= 0;
# Model a piecewise linear function given a list of pairs (x, y=f(x)):
\$PWL[x,y]{zip(xvalues, yvalues)};

maximize obj: 2*x + 15*y;
s.t. A: 3*x + 4*y <= 250;
s.t. B: 7*x - 2*y + 3*u <= 170;
end;```

`vector_packing.mod`:

```# Load a vector packing instance from a file:
\$EXEC{
from pyvpsolver import VBP
instance = VBP.from_file("data/instance.vbp")
};
\$PARAM[b{I}]{instance.b};
var x{I}, >= 0;

# Generate the arc-flow model:
\$VBP_FLOW[Z]{instance.W, instance.w, ["x[{}]".format(i) for i in range(instance.m)]};
# Variable declarations and flow conservation constraints will be created here

minimize obj: Z;
s.t. demand{i in I}: x[i] >= b[i]; # demand constraints
end;```

### PyMPL Parser

```import os
from pympl import PyMPL  # import the parser

# Create a parser and pass local and global variables to the model:
parser = PyMPL(locals_=locals(), globals_=globals())`

# Parse a file with PyMPL statements and produce a valid AMPL model:
parser.parse("pympl_model.mod", "ampl_model.mod")

# Call GLPK to solve the model (if the original model uses only valid GMPL statements):
os.system("glpsol --math ampl_model.mod")

# Call AMPL to solve the model:
os.system("ampl ampl_model.mod")```

Advanced features:

• Given a function `f(varname)` that takes a variable name and returns its value:

• If any command used implements solution extraction you can use `parser[command_name].extract(f)` to extract the solution;
• If any command used implements cut generators you can use `parser[command_name].separate(f)` to generate cutting planes.

Copyright © 2015-2016 Filipe Brandão < fdabrandao@dcc.fc.up.pt >. All rights reserved.

## About

Mathematical Programming Toolbox for AMPL/GMPL

21 tags

## Packages 0

No packages published