Before we give the complete syntax for an SDIF file, we give an
illustrative example. In order to exhibit as many constructs as
possible, we consider how we might encode the example in
Section 2.5. We urge the reader to study this section in
detail. As always, there are many possible ways of specifying a
particular problem; we give one in Figures 3.1 and 3.2,
pages and
.
The horizontal and vertical lines are merely included to indicate the
extent of data fields. The actual widths of the fields
are given at the top of the figure, and the column numbers given at
its foot.
The SDIF file naturally divides into two parts. In the first part, lines 2 to 39 of the figure, we specify information regarding linear functions used in the example. In the second part, lines 40 to 93, we specify nonlinear information. The first part is merely an extension of the MPS input format; the second part is new.
The file must always start with a NAME card, on which a name (in this case EG3) for the example may be given (line 1), and must end with an ENDATA card (line 93). A comment is inserted at the end of line 1 as to the source of the example. The character $ identifies the remainder of the line as a comment; the comment is ignored when interpreting the input file.
We next specify names of parameters
which will occur frequently in
specifying the example (lines 2 to 5). In our case the integer and
real parameters
1 and ONE are given along with N, a
problem dimension -- here N is set to 100, but it would be
trivial to change the example in 6 to allow variables
for any
. We make a comment to this effect on
line 4; any card with the character * in column 1 is a comment card
and its content is ignored when interpreting the input file.
We now name the problem variables
and groups
(in our example objective function and constraints)
used. The groups may be specified before or
after the variables. We choose here to name the groups first.
The objective function
will be known as OBJ (line 7); the
character N in field 1 specifies that this is an objective
function group.
The inequality constraints (2.19)
and (2.20) are named
and
respectively. Rather than
specify them individually, a do-loop
is used to make an array
definition. Thus the constraints
are defined en masse
on lines 9 to 11 with the do-loop index I running from the
previously defined value
to the value NM1. The integer
parameter, NM1,
is defined on line 8 to be the sum of N and the value
and in our case will be 99. The characters XL
in field 1 of line 10 indicate that an array
definition is being made
(the
) and that the groups
are less-than-or-equal-to
constraints
(the L). The do-loop introduced on line 9 with the
characters DO
in field 1 is terminated on line 11 with the
characters ND
in its first field. In a similar way, the constraints
are defined all together on lines 12 to 14;
that these constraints involve bounds
on both sides is taken care of
by considering them to be greater-than-or-equal-to constraints
(XG)
on line 13 and later specifying the additional upper bounds in
the RANGES
section (lines 26 to 29). Finally,
the equality constraint (2.21)
is to be called CONEQ (line 15); the character E
in field 1 specifies that this is an equality constraint group.
Having named the groups,
we next name the problem variables.
At the
same time, we include the coefficients of all the linear elements
used. The variables are named
and Y; an array
declaration is made for the former set on lines 17 to 19
and Y is defined on line 20. The character X in field 1 of
line 18 indicates that an array definition is used. Only the objective
function
(2.18), inequality constraint
(2.19) and equality
constraint groups
(2.21) contain linear elements.
As well as
introducing Y, line 20 also specifies that the linear element
associated with group OBJ (field 3) involves variable Y,
and that Y 's coefficient in the linear element
is 1.0 (field 4). A do-loop
is now used in lines 21 to 23 to show that the linear
elements for constraints (2.19) also use the variable Y.
It is assumed that unless a variable is explicitly identified with a
linear element, the element is independent of that variable. Thus,
although (2.21) uses a linear element, the element is constant
and need not be specified in the VARIABLES
section.
The only remaining part of the linear elements which must be specified is the constant term. Again, only nonzero constants need be given. For our example, only the equality constraint group (2.21) has a nonzero constant term and this data is specified on lines 24 and 25. The string C1 in field 2 of line 25 is the name given to a specific set of constants. In general, more than one set of constants may be specified in the SDIF file and the relevant one selected in a postprocessing stage. Here, of course, we only have one set.
As we have seen, the inequality constraint groups (2.20) are
bounded from above as well as from below. In the RANGES
section (lines 26 to 30) we specify these upper bounds (or range
constraints as they are sometimes known).
The numerical values
are specified for each bound for the relevant groups
in an array
definition on line 28; the string R1 in field 2 is once
again a name
given to a specific set of range values as it is possible
to define more than one set in the RANGES section.
We now turn to the simple bounds
(2.22) which are specified in
lines 30 to 36 of the example. All problem variables are assumed to
have lower bounds of zero and no upper bounds unless otherwise
specified. All but one of the variables for our example have lower
bounds of . We thus change the default
value for the value of the lower bound on line 31 - the set of bounds
is named BND1. The character L
specifies that it is the lower bound
default that is to be changed.
The string 'DEFAULT'
in field 3 indicates that the default is being changed. The variable
is given an upper bound
of
. We encode that in a do-loop on
lines 32 to 35 of the figure. The do-loop index I is an
integer. We change its current value to a real on line 33 and assign
that value as the upper bound
on line 34. The character Z in
field 1 of this line indicates that an array
definition is being made
and that the data is taken from a parameter in field 5 (as opposed to
a specified numerical value in field 4) and the character U
specifies that the upper bound
value is to be assigned. The variable
y is unbounded or, as it is often known, free.
This is specified on line 36, the string FR
in field 1 indicating that Y is free.
The final ``linear'' piece of information given is an estimate of the
solution to the problem (if known) or at least a set of values from
which to start a minimization algorithm. This information is given on
lines 37 to 39. For our problem, we choose the values
and
. Unless otherwise
specified, all starting values take a default of zero.
We change that
default on line 38 to
-- the set of starting values are
named START1 -- and then specify the individual value for the
variable Y on line 39.
We now specify the nonlinear information.
Firstly, we recall that
there is a quadratic objective group,
. We need to specify the nonzero coefficients
of the terms
, and in our cases these are
and
.
The rule that we adopt is
that there is no need to supply both nonzeros
and
since they are the same, and
that one (whichever is unimportant) suffices. Thus
and we (arbitrarily) choose to give
.
In the QUADRATIC section on lines 39a to 39b, we indicate that
the quadratic objective has two terms involving
; the coefficient 4 is given for the
term, while that for
the
term is assigned the value 2.
Next, we saw in Section 2.5
that there are four element types
for the problem, being of the form
(i)
, (ii)
, (iii)
and (iv)
. In the ELEMENT TYPE
section on lines 40 to 48, we record details of these types. We name
the four types (i)-(iv) 3PROD, 2PROD, SINE and SQUARE
respectively. For 3PROD, we define the elemental variables
(lines 41 and 42) to be V1, V2 and V3 and the internal
variables (line 43) to be U1 and U2. Elemental variables
may be defined, two to a line, on lines for which field 1 is EV.
Internal variables,
on the other hand, are defined on lines with IV in field 1. Similar definitions are made for 2PROD (line
44), SINE (line 46) and SQUARE (line 47). The type 2PROD also makes use of a parameter
. This is named P1
on line 45 for which field 1 reads EP.
Having specified the element types,
we next specify individual
nonlinear elements
in the ELEMENT USES
section. As we have seen, the objective function
group uses a single
nonlinear element of type
3PROD. We name this particular element
OBJ1. On line 50, the character T in field 1 indicates
that the OBJ1 is of type 3PROD. The assignment of problem
to elemental variables
is made on lines 51 to 53. Problem variables
X1 and X2 are assigned to elemental variables V1 and
V3; the assignment is indicated by the character V in
field 1. In order to assign (or in general
) to
,
we assign the array
entry X(N) to V2. Notice that as an
array element is being used, this must be specially flagged (ZV
in field 1) as otherwise the wrong variable (called X(N) rather
than X100, which is the expanded form of X(N)) would be
assigned. There are two nonlinear elements
for each inequality
constraint group
(2.19), each being of the same type 2PROD. We name these
elements
and
. The assignments are made on lines 54 to 67 within a do-loop.
On lines 56 and 60 the elements are named
and their types assigned.
As array
assignments are being used, field 1 for both lines contains
the string XT.
The elemental variables
are then associated with
problem variables
on lines 57-58 and 61-62 respectively. Again array
assignments are used and field 1 contains the string ZV.
Notice that on line 58 is assigned the problem variable
, where the index IP1 is defined as the sum of the
index I and the integer value 1 on line 55. It remains to
assign values for the parameter
for each element.
This is
straightforward for the elements
as the
required value is always 1 and the assignment is made on line 59 on a
card
with first field XP.
The remaining elements have varying parameter
values
.
This value is calculated on lines 63 to 65 and assigned on line 66.
Line 63 assigns REALI to have the floating point value of the
index I. This new value is then divided into the value 2 on
line 64 and the value assigned to ONE is added to the resulting
value on the final line. Thus the parameter
2OVAI+1 holds the
required value of
and the array
assignment is made on line 66.
On this line the string ZP indicates that an array
assignment is
being made, taking its value from the parameter 2OVAI+1 in field
4 (the Z) and that the elemental parameter
P1 in field 3
is to be assigned (the P). The definition of the nonlinear
elements for the remaining constraint
groups is straightforward. The inequality constraints
(2.20) each
use a single element, named
, of type SINE and the appropriate array
assignments are made on lines 68 to
70. Finally, the equality constraint
(2.21) is named CEQ1
and typed SQUARE with appropriate elemental variable
assignments on lines 72 to 74.
We next need to specify the nontrivial group types.
This is done in
the GROUP TYPE
section on lines 75 to 77. We saw in
Section 2.5 that a single nontrivial group, , is required. On line 76, the name PSQUARE is given
for the type and the group type variable
is named
The string GV
pin field 1 indicates that a type and its
variable are to be defined. On the following line field 1 is GP
and this is used to announce that the group type parameter
is named P1.
Finally, we need to allocate nonlinear elements
to groups
and specify
what type the resulting groups are to be. This takes place within the
GROUP USES
section which runs from line 78 to 90. The objective
function group is nontrivial and its type is announced on line 79. The
group uses the single nonlinear element
OBJ1 specified on line
80 and the group-type parameter
is set to the value
on the next line. The characters T, E and
P
in the first fields of these three cards
announce their
purposes. The inequality groups (2.19) each use two nonlinear
elements,
but the groups themselves are trivial
(and thus their types
do not have to be made explicit). The assignment of the elements to
each group is made in an array
definition on lines 82 to 84; line 83
is flagged as assigning elements to a group with the string XE
in field 1. The second set of inequality constraints
(2.20) use
the nontrivial group type PSQUARE with parameter value 1.
Each group uses a single nonlinear element
and the appropriate array
assignments are contained on lines 85 to 89. Lastly the trivial
equality constraint group (2.21) is assigned the nonlinear
element CEQ1 on line 90.
The definition of the problem is now complete. However, it often helps the intended minimization program if known lower and upper bounds on the possible values of the objective function can be given. For our example, the objective function (2.18) cannot be smaller than zero. This data is specified on lines 91 and 92. The string LO in field 1 of line 92 indicates that a lower bound is known for the value of (2.18). The string OBOUND in field 2 of this line is a name given to this known bound. The value of the lower bound now follows in field 4. No upper bound need be specified as the function is initially assumed to lie between plus and minus infinity.