GLPK/Using GMPL (MathProg)
This page gives examples and tips about the syntax and usage of GMPL (MathProg).
Introduction
[edit | edit source]The first thing to note is that MathProg is not a procedural language. For example, unlike most programming languages, MathProg has no assignment statement. Rather MathProg is a functional language. MathProg is modeled on the AMPL language and provides a subset of that language. And like AMPL, its syntax is tailored to the expression of mathematical optimization problems.
MathProg objects
[edit | edit source]Sets
[edit | edit source]Within MathProg, sets are unordered collections of elements (unlike arrays in programming languages), so the element positions are indeterminate.
MathProg syntax
[edit | edit source]MathProg suffixes
[edit | edit source]As from GLPK 4.44 released 03 June 2010, MathProg supports suffixes for constraints and variables. The use of suffixes is covered in the official documentation under appendix A of doc/gmpl.pdf. The following table provides a summary:
Suffix | Purpose |
---|---|
.lb | lower bound |
.ub | upper bound |
.status | status in the solution |
.val | primal value |
.dual | dual value |
The MathProg printf statement can be used to create customized output. In the following case, the dual value of constraint c1 will be printed to the terminal:
... solve; printf "dual value of constraint c1: %g\n", c1.dual;
Terminal output can also be duplicated to a text file with the GLPSOL command-line option --log filename.log.
Set statement
[edit | edit source]The data parameter of the set statement is (as of May 2011) undocumented, but the idea is quite simple. Imagine that you declare a plain set S consisting of 5-tuples (i,j,k,l,m):
set S, dimen 5;
which will be provided with data in the data section. But what you actually want is an array of sets T{j,m}, where T[j,m] is a set of triplets (l,i,k) from S. Using the data attribute, additionally declare a set T as follows:
set T{j,m}, data S[2,5,4,1,3];
This statement has the same effect as providing the corresponding data for T itself from the data section, where [2,5,4,1,3] is a permutation of the component indices: the 2nd and 5th components of every 5-tuple in S gives a pair (j,m) used to index the elements of T, and the 4th, 1st, and 3rd components of the 5-tuple are used to build the (l,i,k) triplets, which are then included in the set T[j,m]. Finally, only plain sets are supported by the data attribute.
Limitations
[edit | edit source]Ordered sets
[edit | edit source]Ordered sets are not supported in MathProg. The discussions here and here provide some background as to why not. This 2006 thread describes one particular work-around.