# 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.

### Commenting

The {\tt #} is used for commenting, any characters after the {\tt #} are ignored by AMPL.

#### Examples

The Whiskas Cat Food Problem

\begin{verbatim} var x1 >= 0; # Percentage chicken meat used in 100g of cat food (= g) \end{verbatim}

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

### Using {\tt symbolic}

The {\tt 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

\begin{verbatim} 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 \end{verbatim}

#### Example. Searching a 2-Dimensional Set

\begin{verbatim} 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 \end{verbatim}

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

#### Example. Dynamically Building a Set

\begin{verbatim} 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']; } \end{verbatim}

-- MichaelOSullivan - 27 Feb 2008

Edit | Attach | Watch | Print version |  | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r1 - 2008-02-27 - MichaelOSullivan

 Home OpsRes Web P View Edit Account
 Edit Attach
Copyright © 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