param
keyword followed by a label.
param <paramname>;
param MinProtein;Like variables parameters are often defined over a set and may have several attributes:
param <paramname> [{<indexname>}] [<attributes>];
param ProteinPercent {INGREDIENTS} >= 0 <= 100;Return to top
\begin{verbatim} param counter integer >= 0;
let counter := -1; # This generates an error as counter is < 0 \end{verbatim}
\begin{verbatim} set DIGITS := 1..5; param isok {DIGITS} binary default 1;
let isok[3] := 0; display {i in DIGITS} isok[i]; # Result #==
# isok[i] [*] :=
# 1 1
# 2 1
# 3 0
# 4 1
# 5 1
# ;
\end{verbatim}The AMPL macros {\tt Infinity} and {\tt -Infinity} are useful as defaults for parameters that act as bounds ({\tt Infinity} as a default upper bound, 0 or {\tt -Infinity} as a default lower bound).
\begin{verbatim} param MinProtein := 8.0 ; \end{verbatim}
For parameters declared over a 1-dimensional set this can be done using default values and a list for those parameters that don't take default values:
\begin{verbatim} model;
param Min {REQUIREMENTS} default -Infinity; data; param Min := PROTEIN 8.0 FAT 6.0 ; \end{verbatim}In a similar way to 2-dimensional sets, there are three different ways to define 2-dimensional sets.
\begin{verbatim} model;
param Min {ARCS} integer, default 0; data; param Min := Youngstown 'Kansas City' 1000 Pittsburgh 'Kansas City' 2000 Cincinnati Albany 1000 \end{verbatim}
\begin{verbatim}
param
If the element does not exist or the default value is correct then place a {\tt .} in the table. Otherwise, put the parameter value.
\begin{verbatim}
param Cost: Cincinnati 'Kansas City' Chicago Albany Houston Tempe Gary :=
Youngstown 350 450 375 500 . . .
Pittsburgh 350 450 400 . . . 450
Cincinnati . . . 350 550 . .
'Kansas City' . . . . 375 650 .
Chicago . . . . . 600 120 ;
\end{verbatim}
\begin{verbatim}
param
\begin{verbatim}
param Cost :=
[Youngstown, *] Cincinnati 350 'Kansas City' 450 ...
...
[Chicago, *] ... Gary 120 ;
\end{verbatim}
*Note* The row indices have {\tt [} and {\tt ]} around them (as opposed to {\tt (} and {\tt )} for sets).
\begin{verbatim}
param:
If a parameter is not defined or the default value is sufficient, use the {\tt .} operator.
\begin{verbatim}
model;
This approach also works for 2-dimensional parameters and lists, for the American Steel problem this allows us to "cut-and-paste" the list of arc properties
\begin{verbatim}
From node To node Cost Minimum Maximum
Youngstown Albany 500 - 1000
Youngstown Cincinnati 350 - 3000
Youngstown Kansas City 450 1000 5000
Youngstown Chicago 375 - 5000
etc
\end{verbatim}
becomes
\begin{verbatim}
param: Cost Min Max:=
Youngstown Cincinnati 350 0 3000
Youngstown 'Kansas City' 450 1000 5000
...
Chicago Gary 120 0 4000
;
\end{verbatim}
\begin{verbatim}
# Objective: minimise the cost per (100g) can
minimize TotalCost: sum {i in INGREDIENTS} Cost[i] * Percentage[i];
Accessing a Parameter
Parameter values are accessed by specifying the indices of the parameter you want to access within {\tt [} and {\tt ]}.
Examples
See {\tt Cost} and {\tt Contributes} below.
Under Construction Below Here
Multi-dimensional Parameters
Since we have been using multi-dimensional sets, we might need multi-dimensional parameters, e.g., {\tt Cost {TIME_ARCS}}. We can define these parameters in a similar way to