|
name is a symbolic name of the parameter;
value is an optional default value of the parameter;
record, $\dots$, record are data records.
tabbing-data specifies parameter data in the tabbing format.
Commae preceding data records may be omitted.
Data records:
:=
is a non-significant data record which may be used freely to improve readability;
[
slice ]
specifies a slice;
specifies parameter data in the plain format;
:
tabular-dataspecifies parameter data in the tabular format;
(tr) :
tabular-dataspecifies parameter data in the transposed tabular format. (In this case
the colon following the keyword (tr)
may be omitted.)
Examples
param T := 4; param month := 1 Jan 2 Feb 3 Mar 4 Apr 5 May; param month := [1] 'Jan', [2] 'Feb', [3] 'Mar', [4] 'Apr', [5] 'May'; param init_stock := iron 7.32 nickel 35.8; param init_stock [*] iron 7.32, nickel 35.8; param cost [iron] .025 [nickel] .03; param value := iron -.1, nickel .02; param : init_stock cost value := iron 7.32 .025 -.1 nickel 35.8 .03 .02 ; param : raw : init stock cost value := iron 7.32 .025 -.1 nickel 35.8 .03 .02 ; param demand default 0 (tr) : FRA DET LAN WIN STL FRE LAF := bands 300 . 100 75 . 225 250 coils 500 750 400 250 . 850 500 plate 100 . . 50 200 . 250 ; param trans_cost := [*,*,bands]: FRA DET LAN WIN STL FRE LAF := GARY 30 10 8 10 11 71 6 CLEV 22 7 10 7 21 82 13 PITT 19 11 12 10 25 83 15 [*,*,coils]: FRA DET LAN WIN STL FRE LAF := GARY 39 14 11 14 16 82 8 CLEV 27 9 12 9 26 95 17 PITT 24 14 17 13 28 99 20 [*,*,plate]: FRA DET LAN WIN STL FRE LAF := GARY 41 15 12 16 17 86 8 CLEV 29 9 13 9 28 99 18 PITT 26 14 17 13 31 104 20 ;
The parameter data block is used to specify complete data for a parameter (or parameters, if data are specified in the tabbing format) whose name is given in the block.
Data blocks can be specified only for the parameters, which are non-computable, i.e. which have no assign attribute in the corresponding parameter statements.
Data defined in the parameter data block are coded as a sequence of
data records described below. Additionally the data block can be
provided with the optional default
attribute, which specifies
a default numeric or symbolic value of the parameter (parameters). This
default value is assigned to the parameter or its members, if
no appropriate value is defined in the parameter data block. The
default
attribute cannot be used, if it is already specified in
the corresponding parameter statement(s).
The assign (:=
) data record is a non-signficant element. It may
be used for improving readability of data blocks.
The slice data record is a control record which specifies a slice of the parameter array. It has the following syntactic form:
[
$s_1$,
$s_2$,
$\dots$,
$s_n$]
where $s_1, s_2, \dots, s_n$ are components of the slice.
Each component of the slice can be a number or symbol or the asterisk
(|*|
). The number of components in the slice must be the same as
the dimension of the parameter. For instance, if the parameter is a
4-dimensional array, the slice must have four components. The number of
asterisks in the slice is called slice dimension.
The effect of using slices is the following. If a m-dimensional slice (i.e. a slice which has m asterisks) is specified in the data block, all subsequent data records must specify subscripts of the parameter members as if the parameter were m-dimensional, not n-dimensional.
Whenever m subscripts are encountered, each asterisk in the slice is
replaced by corresponding subscript that gives n subscripts, which
define the actual parameter member. For example, if the slice
[a,*,1,2,*]
is in effect, and the subscripts 3
and b
are
encountered in a subsequent data record, the complete subscript list
used to choose a parameter member is [a,3,1,2,b]
.
It is allowed to specify a slice that has no asterisks. Such slice itself defines a complete subscript list, in which case the next data record can define only a single value of the corresponding parameter member.
Being once specified the slice effects until either a new slice or the end of data block has been encountered. Note that if there is no slice specified in the data block, a dummy one, components of which are all asterisks, is assumed.
The plain data record defines the subscript list and a single value in plain format. This record has the following syntactic form:
$t_1$
,
$t_2$,
$\dots$,
$t_n$,
$v$
where $t_1, t_2, \dots, t_n$ are subscripts, $v$ is a value. Each subscript as well as the value can be a number or symbol. Commae following subscripts are optional and may be omitted.
In case of 0-dimensional parameter or slice the plain data record have no subscripts and consists of a single value only.
The tabular data record defines several values, where each value is provided with two subscripts. This record has the following syntactic form:
$\matrix{ {\tt :} & c_1 & c_2 & \dots & c_n & {\tt :=} \cr r_1 & a_{11} & a_{12} & \dots & a_{1n} & \cr r_2 & a_{21} & a_{22} & \dots & a_{2n} & \cr \dots & \dots & \dots & \dots & \dots & \cr r_m & a_{m1} & a_{m2} & \dots & a_{mn} & \cr }$
where $r_1, r_2, \dots, r_m$ are numbers and/or
symbols which correspond to rows of the table, $c_1, c_2$,
$\dots, c_n$ are numbers and/or symbols which correspond to columns
of the table, $a_{11}, a_{12}, \dots, a_{mn}$ are the
table elements. Each element can be a number or symbol or the single
decimal point. (In this data record the delimiter :
preceding
the column list and the delimiter :=
following the column list
cannot be omitted.)
Each element $a_{ij}$ of the tabular data block ($1\leq i\leq m, 1\leq j\leq n$) defines two subscripts, where the first subscript is $r_i$, and the second one is $c_j$. These subscripts are used in conjunction with the current slice to form the complete subscript list which identifies a particular member of the parameter array. If $a_{ij}$ is a number or symbol, this value is assigned to the parameter member. However, if $a_{ij}$ is the single decimal point, the member is assigned a default value specified either in the parameter data block or in the parameter statement, or, if no default value is specified, the member remains undefined.
Since the tabular data record provides two subscripts for each value, either the parameter or the slice currently used must be 2-dimensional.
The transposed tabular data record has the following syntactic form:
$\matrix{ {\tt (tr)\ :} & c_1 & c_2 & \dots & c_n & {\tt :=} \cr r_1 & a_{11} & a_{12} & \dots & a_{1n} & \cr r_2 & a_{21} & a_{22} & \dots & a_{2n} & \cr \dots & \dots & \dots & \dots & \dots & \cr r_m & a_{m1} & a_{m2} & \dots & a_{mn} & \cr }$
(In this case the delimiter :
following the keyword (tr)
is optional and may be omitted.)
This data record is completely analogous to the tabular data record (see above) with the only exception that the first subscript defined by the element $a_{ij}$ is $c_j$ while the second one is $r_i$.
Being once specified the (tr)
indicator effects on all subsequent
data records until either a slice or the end of data block has been
encountered.
The parameter data block in the tabbing format has the following syntactic form:
$\matrix{ {\tt param\ default}\ {\it value} : s :&p_1\ ,&p_2\ ,&\dots\ ,&p_k \ :=\cr \hfill t_{11}\ ,\ t_{12}\ ,\ \dots\ ,\ t_{1n}\ ,&a_{11}\ ,&a_{12}\ ,& \dots\ ,&a_{1k}\hfill\cr \hfill t_{21}\ ,\ t_{22}\ ,\ \dots\ ,\ t_{2n}\ ,&a_{21}\ ,&a_{22}\ ,& \dots\ ,&a_{2k}\hfill\cr \ \ \ \ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .\ \ .& \dots&\dots&\dots\ \ &\dots\ \ \ \cr \hfill t_{m1}\ ,\ t_{m2}\ ,\ \dots\ ,\ t_{mn}\ ,&a_{m1}\ ,&a_{m2}\ ,& \dots\ ,&a_{mk}\ ;\hfill\cr }$
The keyword default
may be omitted along with a value
following it.
The symbolic name $s$ of a set may be omitted along with the colon following it.
All comae are optional and may be omitted.
The data block in the tabbing format shown above is exactly equivalent to the following data blocks:
set
$s:=(t_{11},t_{12},\dots,t_{1n})\ (t_{21},t_{22}, \dots,t_{2n})\ \dots\ (t_{m1},t_{m2},\dots,t_{mn})$ ;
param
$p_j$default
value :=$[t_{11},t_{12},\dots,t_{1n}]\ a_{1j} \ [t_{21},t_{22},\dots,t_{2n}]\ a_{2j}\ \dots\ [t_{m1},t_{m2},\dots, t_{mn}]\ a_{mj}$ ;
where j = 1, 2, $\dots$, k.