**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
- Using symbolic
- Sets
- Variables
- Parameters
- Expressions
- Objective Functions
- Constraints
- Logical Statements
- Looping Statements
- Displaying and Printing
- Miscellaneous AMPL Commands

The `#`

is used for commenting, any characters on a line after the `#`

are ignored by AMPL.

# 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

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

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

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 .

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

Topic revision: r9 - 2008-04-02 - MichaelOSullivan

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

Ideas, requests, problems regarding TWiki? Send feedback