The AMPL Syntax Guide

Disclaimer This is a guide to the AMPL syntax only. For a comprehensive reference to the AMPL language see AMPL: A Modeling Language for Mathematical Programming.

  1. Commenting
  2. Using symbolic
  3. Sets
  4. Variables
  5. Parameters
  6. Expressions
  7. Objective Functions
  8. Constraints
  9. Logical Statements Fix this link - Lauren
  10. Looping Statements Fix this link - Lauren
  11. Displaying and Printing
  12. Miscellaneous AMPL Commands Fix this link - Lauren


The # is used for commenting, any characters on a line after the # are ignored by AMPL.


The Whiskas Cat Food Problem
# The set of all possible ingredients for the cat food set INGREDIENTS; 

The Surfboard Production Problem

param Resin {SURFBOARDS} >= 0; # Amount of resin (in kilos) needed for a board
param TotalResin >= 0; # Total amount of resin available

Using =symbolic

The symbolic keyword is used to create parameters that represent character strings. Usually they are used to represent members of 1-dimensional sets or part of a tuple for multi-dimensional sets. However, they can also be used to represent file names or to automatically build labels (for entry in a set, for example).

Example. Searching a 1-Dimensional set

param gotcha symbolic within SET;
for {s in SET} {
   if  then
     let gotcha := s;
} # gotcha now contains the (last) element in SET that satisfies the condition

Example. Searching a 2-Dimensional Set

set SET1;
set SET2;

set TWO_D_SET within SET1 cross SET2;

param got_one symbolic within SET1;
param got_two symbolic within SET2;

for {(s, t)  in TWO_D_SET} {
   if  then {
     let got_one := s;
     let got_two := t;
} # (got_one, got_two) now contains the (last) element in TWO_D_SET # that satisfies the condition

To build labels for set elements you need a symbolic parameter and the parts of the label. You can then "glue" the parts of the label together by enclosing the label within ( and ) and joining the parts with &. The parts can be set elements, strings or numbers. Numbers are converted to strings using the %g format from printf .

Example. Dynamically Building a Set

param name symbolic;

let SUPPLY_NODES := {};

   let name := (s & '-Woodchips');
   let SUPPLY_NODES := SUPPLY_NODES union {name};
   let Supply[name] := MaterialSupply[s, 'Woodchips'];
   let {d in DEMAND_NODES} Cost[name, d] := TransportationCost[s, d];
   let dummyDemandCost[name] := DisposalCost['Woodchips'];

-- MichaelOSullivan - 27 Feb 2008

Edit | Attach | Watch | Print version | History: r9 | r7 < r6 < r5 < r4 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r5 - 2008-03-11 - MichaelOSullivan
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback