Difference: ParametersInAMPL (7 vs. 8)

Revision 82009-09-07 - CameronWalker

Line: 1 to 1
 
META TOPICPARENT name="AMPLSyntax"
<-- Ready to Review -->
Line: 20 to 20
 

Declaring a Parameter

AMPL parameters are created in a similar way to AMPL variables, using the param keyword followed by a label.

Changed:
<
<
param ; 
>
>
param ; 
 

Example

Changed:
<
<
param MinProtein; 
Like variables parameters are often defined over a set and may have several attributes:
param  [{}] []; 
>
>
param MinProtein; 
Like variables parameters are often defined over a set and may have several attributes:
param  [{}] []; 
 

Example

param ProteinPercent {INGREDIENTS} >= 0 <= 100; 
Line: 49 to 49
  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

Changed:
<
<
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 # ; 
>
>
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 # ; 
  The AMPL macros Infinity and -Infinity are useful as defaults for parameters that act as bounds ( Infinity as a default upper bound, 0 or -Infinity as a default lower bound).
Line: 63 to 63
 

Defining 2-Dimensional Parameters

Changed:
<
<
In a similar way to 2-dimensional sets, there are three different ways to define 2-dimensional sets.
>
>
In a similar way to 2-dimensional sets, there are three different ways to define 2-dimensional parameters.
 
  1. Using a List For any parameter values that don't take the default value, you list the set element and value for that parameter.
    model; param Min {ARCS} integer, default 0; data; param Min := Youngstown 'Kansas City' 1000 Pittsburgh 'Kansas City' 2000 Cincinnati Albany 1000 
Changed:
<
<
  1. Using a Table To define parameter data in a table format you use the param keyword and the parameter's name followed by the : operator, a list of the second index set elements followed by the := operator, then rows of the table with an element of the first index set followed by the values corresponding to the second index set's element in that column.
    param  :   ...  :=    ...  ...    ...  ; 
    If the element does not exist or the default value is correct then place a . 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 ; 
    You can also define parameter data in a transposed table using almost the same syntax, but with the (tr) keyword and reversing the indexing sets
    param  (tr) :   ...  :=    ...  ...    ...  ; 
>
>
  1. Using a Table To define parameter data in a table format you use the param keyword and the parameter's name followed by the : operator, a list of the second index set elements followed by the := operator, then rows of the table with an element of the first index set followed by the values corresponding to the second index set's element in that column.
    param : ... := ... ... ... ; 
    If the element does not exist or the default value is correct then place a . 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 ; 
    You can also define parameter data in a transposed table using almost the same syntax, but with the (tr) keyword and reversing the indexing sets
    param (tr) : ... := ... ... ... ; 
 
  1. Using an Array You define a list of column indices and values for each row index.
    param Cost := [Youngstown, *] Cincinnati 350 'Kansas City' 450 ... ... [Chicago, *] ... Gary 120 ; 
    Note The row indices have [=} and =] around them (as opposed to ( and ) for sets).

Defining Multi-Dimensional Parameters

Line: 75 to 75
 
  1. Using an Array
    set TIME_ARCS := (*, May, *, May) (Youngstown, Cincinnati) 0.35 ... ; 
    or
    set TIME_ARCS := (Youngstown, May, *, May) Cincinnati 0.35 'Kansas City' 0.45 ... ... ; 

Defining Multiple Parameters

Changed:
<
<
Using the : operator, multiple parameters may be defined at once. Simply state the names of the parameters and the := operator. Then list the set elements and values on the following rows.
param:             ... :    ...    ...  ; 
If a parameter is not defined or the default value is sufficient, use the . 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  ; 
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
>
>
Using the : operator, multiple parameters may be defined at once. Simply state the names of the parameters and the := operator. Then list the set elements and values on the following rows.
param:             ... :    ...    ...  ; 
If a parameter is not defined or the default value is sufficient, use the . 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  ; 
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
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback