GNU MathProg
GNU MathProg is a high-level mathematical modelling language designed for creating and solving linear programming, mixed integer programming, and other related optimisation problems. It is a subset of the AMPL and is primarily used with the GNU Linear Programming Kit.
Overview
GNU MathProg provides a structured definition of data, decision variables, constraints, and objective functions. It allows users to describe complex optimisation problems in a human-readable form, separate from the solution algorithm. The language supports sets, parameters, variables, constraints, and objective functions, and offers features for reading external data and generating reports.Because of its syntactical similarity to AMPL, MathProg enables easy transition to commercial solvers for larger or more complex problems, while maintaining compatibility with free and open-source software tools.
Features
- Support for linear and mixed-integer linear programming
- AMPL-like syntax for easy model formulation
- Built-in data section for embedding problem data
- Compatibility with GLPK for solving and analysis
- Ability to import external data using table statements
Usage
MathProg models are typically written in.mod files and solved using the GLPK solver via the glpsol command-line tool, a desktop or online interface. The general command-line usage pattern is:glpsol --math my-model.mod --data my-data.datMathProg is particularly suited for educational purposes, small-scale optimisation, and rapid prototyping of models before deployment in more robust optimisation environments.
Example
We want to maximise the profit of two products. The profit for one pallet of A is £80, and £100 for B. Both products rely on the same resources. It takes two hours to produce one pallet of product A and four hours for B. The time is limited to 80 hours. To produce one palette of A, we need 80 kg of material. Similarly, 60 kg of material is needed for one pallet of B. The common material for A and B is limited to 2400 kg. How many pallets of A and B must be produced to maximise the profit?The mathematical problem formulation is:
The advantage of the MathProg is its similarity to the mathematical formulation.
- decision variables
var x2; # product B
maximize pounds: 80*x1 + 100*x2; # objective
- constraints
s.t. material: 80*x1 + 60*x2 <= 2400;
solve;
- Output code
printf " %.1f pallets of product A,\n",x1;
printf " %.1f pallets of product B \n",x2;
printf "This will return a profit of %.2f pounds\n",pounds;
end;
This example demonstrates the similarity of the MathProg model to the mathematical formulation. It contains an output code section, allowing the formatted display of essential values such as the objective and optimal decision values. For instance, the above output code generates:
The optimal production per day is:
24.0 pallets of product A,
8.0 pallets of product B
This will return a profit of 2720.00 pounds