# 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 `#` 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 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 := {}; 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']; } `

## Sets in AMPL

-- MichaelOSullivan - 27 Feb 2008

Edit | Attach | Watch | Print version |  | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r2 - 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