Tags:
create new tag
view all tags
<!-- Ready to Review - done - Lauren--> ---+ The AMPL Syntax Guide *%RED%Disclaimer%ENDCOLOR%* This is a __guide__ to the AMPL syntax only. For a comprehensive reference to the AMPL language see [[https://www.ampl.com/BOOK/index.html][AMPL: A Modeling Language for Mathematical Programming]]. 1 [[#comments][Commenting]] 1 [[#symbolic][Using symbolic]] 1 [[SetsInAMPL][Sets]] 1 [[VariablesInAMPL][Variables]] 1 [[ParametersInAMPL][Parameters]] 1 [[ExpressionsInAMPL][Expressions]] 1 [[ObjectiveFunctionsInAMPL][Objective Functions]] 1 [[ConstraintsInAMPL][Constraints]] 1 [[LogicInAMPL][Logical Statements]] 1 [[LoopingInAMPL][Looping Statements]] 1 [[PrintingInAMPL][Displaying and Printing]] 1 [[MiscellaneousAMPL][Miscellaneous AMPL Commands]] ---++ <a name="comments"></a> Commenting The =#= is used for commenting, any characters on a line after the =#= are ignored by AMPL. ---+++ Examples [[WhiskasCatFoodProblem][The Whiskas Cat Food Problem]] <pre># The set of all possible ingredients for the cat food set INGREDIENTS; </pre> [[SurfboardProduction][The Surfboard Production Problem]] <pre> param Supply {MATERIALS}; # The supply of each raw material param Recipe {MATERIALS, SURFBOARDS}; # The "recipe" for making surfboards </pre> ---++ <a name="symbolic"></a> 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 <pre> 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 </pre> ---+++ Example. Searching a 2-Dimensional Set <pre> 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 </pre> 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 [[https://www.cppreference.com/stdio/printf.html][%g format from printf]] . ---+++ Example. Dynamically Building a Set <pre> 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']; } </pre> -- Main.MichaelOSullivan - 27 Feb 2008
E
dit
|
A
ttach
|
Watch
|
P
rint version
|
H
istory
: r9
<
r8
<
r7
<
r6
<
r5
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r9 - 2008-04-02
-
MichaelOSullivan
Home
Site map
Forum web
Main web
NDSG web
ORUA web
OpsRes web
Sandbox web
TWiki web
OpsRes Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
P
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
E
dit
A
ttach
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback