Skip to content

Mathematical Programming Toolbox for AMPL/GMPL

License

Unknown, AGPL-3.0 licenses found

Licenses found

Unknown
LICENSE
AGPL-3.0
COPYING
Notifications You must be signed in to change notification settings

fdabrandao/pympl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

0fbd55d · Apr 7, 2019
May 27, 2016
Aug 16, 2018
Apr 7, 2019
Feb 20, 2016
May 27, 2016
Feb 18, 2016
Aug 16, 2018
Apr 7, 2019
Jan 25, 2016
Oct 13, 2015
Jan 25, 2016
May 4, 2016
May 27, 2016
May 4, 2016
Feb 23, 2016
May 4, 2016
Jan 25, 2016

Repository files navigation

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: [email protected].


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.

Coverage Status

Useful links

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

[Folder with examples]

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 < [email protected] >. All rights reserved.