<!-- 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]] %RED%Coming soon!%ENDCOLOR% ---++ <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
This topic: OpsRes
>
WebHome
>
AMPLGuide
>
AMPLSyntax
Topic revision: r8 - 2008-03-18 - TWikiAdminUser
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