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
  10. Looping Statements
  11. Displaying and Printing
  12. Miscellaneous AMPL Commands

Commenting

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

Examples

The Whiskas Cat Food Problem

# The set of all possible ingredients for the cat food set INGREDIENTS; 

The Surfboard Production Problem

param Supply {MATERIALS}; # The supply of each raw material

param Recipe {MATERIALS, SURFBOARDS}; # The "recipe" for making surfboards

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 := {};

for {s in SUPPLY_LOCATIONS} {
   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 < r8 < r7 < r6 < r5 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r9 - 2008-04-02 - MichaelOSullivan
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback