\begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim} \begin{verbatim}
param
\end{verbatim}Example
param MinProtein;
\end{verbatim}
Like variables parameters are often defined over a set and may have several attributes:
param
\end{verbatim}Example
param ProteinPercent {INGREDIENTS} >= 0 <= 100;
\end{verbatim}Parameter Types
Parameters have the same possible types as Parameter Bounds
As well as using parameter types to check the validity of data, real and integer parameters can also have bounds set during their declaration. These bounds will be checked by AMPL any time the value of the parameter changes and, if they are violated, and error will be generated.Example
param counter integer >= 0;
let counter := -1; # This generates an error as counter is < 0
\end{verbatim}Default Values
Default parameter values can be used to quickly set a large number of parameter values automatically. If a parameter is used without being explicitly assigned a value the default value is used for that parameter. AMPL uses a default value of 0 if no default value is given.Example
set DIGITS := 1..5;
param isok {DIGITS} binary default 1;
let isok[3] := 0;
display {i in DIGITS} isok[i];
# Result
# ===== 8.0 ;
# 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).Defining a Parameter
Once a parameter has been declared it is usually defined in a data file. This is done simply for a single value
using the assignment operator {\tt :=}:
param MinProtein :
\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:
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.
model;
param Min {ARCS} integer, default 0;
data;
param Min :=
Youngstown 'Kansas City' 1000
Pittsburgh 'Kansas City' 2000
Cincinnati Albany 1000
\end{verbatim}
param
...
;
\end{verbatim}
If the element does not exist or the default value is correct then place a {\tt .} in the table. Otherwise, put the parameter value.
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}
You can also define parameter data in a transposed table using almost the same syntax, but with the {\tt (tr)} keyword and reversing the indexing sets
param
...
;
\end{verbatim}
param Cost :=
[Youngstown, ] Cincinnati 350 'Kansas City' 450 ...
...
[Chicago, *] ... Gary 120 ;
\end{verbatim}
**Note*Defining Multiple Parameters
Using the {\tt :} operator, multiple parameters may be defined at once. Simply state the names of the parameters and the {\tt :=} operator. Then list the set elements and values on the following rows.
param:
;
\end{verbatim}
If a parameter is not defined or the default value is sufficient, use the {\tt .} operator.
model;
# The lower and upper bounds on the requirements
param Min {REQUIREMENTS} default -Infinity;
param Max {REQUIREMENTS} default Infinity;
data;
param: Min Max:=
PROTEIN 8.0 .
FAT 6.0 .
FIBRE . 2.0
SALT . 0.4
;
\end{verbatim}
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
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
param: Cost Min Max:=
Youngstown Cincinnati 350 0 3000
Youngstown 'Kansas City' 450 1000 5000
...
Chicago Gary 120 0 4000
;
\end{verbatim}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.
# Objective: minimise the cost per (100g) can
minimize TotalCost: sum {i in INGREDIENTS} Cost[i] * Percentage[i];
# Constraints: Meet the nutritional requirements
subject to MeetRequirement {r in REQUIREMENTS}:
Min[r] <= sum {i in INGREDIENTS} Contributes[i, r] * Percentage[i]
<= Max[r];
\end{verbatim}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 MichaelOSullivan - 02 Mar 2008